在C-Free中编译简单的C++代码,发现报以上错误:ISO C++ forbids initialization of member `x'(ISO C++禁止初始化成员变量‘x’),经查阅资料:
c++类基于C语言的结构体(struct),并添加了许多特性。C语言的结构体成员不能有初始化赋值(因为每次创建结构类型的对象时都需要执行代码,这对于早期的C编译器来说太复杂了)。
早期的c++(最初称为“C with Classes”)添加了构造函数,这种机制要求在每次创建给定类型的对象时执行代码。由于构造函数可以实现成员变量的初始化,因此成员变量初始化式不是必要的。
但是,有成员变量初始化会更方便,即使它不是严格必要的。新的2011年ISO c++标准已经在语言中添加了这个功能,所以显然ISO c++委员会认为这是一个好主意。这个特性增加了语言的复杂性(例如,必须有新的规则来控制初始化器和构造函数的执行顺序,而依赖于该顺序的代码可能会令人困惑)。委员会认为为了方便,增加一些复杂性是值得的。
也就是说在C++11之前是不支持成员变量初始化的,从C++11开始引入了该功能,因为它是在编写多个构造函数时保证默认值一致性的最简单方法,但不是必须的,视具体情况而定。
标签:初始化,initialization,C++,member,ISO,c++,成员,构造函数 From: https://www.cnblogs.com/chanyuantiandao/p/16988634.html