3 回答
TA贡献1864条经验 获得超2个赞
(1.)为什么C ++中不允许这样做?
来自Bjarne Stroustrup的C ++风格和技巧常见问题解答:
类通常在头文件中声明,并且头文件通常包含在许多翻译单元中。但是,为避免复杂的链接器规则,C ++要求每个对象都有唯一的定义。如果C ++允许将需要作为对象存储在内存中的实体的类内定义,则该规则将被破坏。
(2.)为什么允许const成员初始化?
[ dirkgently说它更好 ]
(3.)这是否意味着C ++中的静态变量没有像C一样用0初始化?
据我所知,只要你在.cpp中声明静态成员var,如果你没有另外指定,它将被零初始化:
// in some .cppint Test::j; // j = int();
TA贡献1877条经验 获得超6个赞
为什么在C ++中不允许这样做?
除非您定义它,否则该变量不会成为l值。
为什么允许const成员初始化?
即使在这种情况下,如果要获取变量的地址,也需要定义。
9.4.2静态数据成员
2在类定义中声明静态数据成员不是定义,除了cv-qualified void之外,它可能是不完整的类型。静态数据成员的定义应出现在包含成员类定义的命名空间范围内。在命名空间作用域的定义中,静态数据成员的名称应使用::运算符通过其类名限定。静态数据成员定义中的初始化表达式在其类的范围内
此外,这主要是一个使用工件,所以你可以写:
class S { static const int size = 42; float array[ size ];};
这是否意味着C ++中的静态变量没有像C一样用0初始化?
不,是他们:
3.6.2非局部变量的初始化
在进行任何其他初始化之前,具有静态存储持续时间(3.7.1)或线程存储持续时间(3.7.2)的变量应为零初始化(8.5)。
虽然事情在C ++ 0x中变得更加棘手。现在可以初始化所有文字类型(而不是当前标准中的整数类型),这意味着现在可以使用声明中的初始化程序初始化所有标量类型(包括浮点数)和某些类类型。
- 3 回答
- 0 关注
- 639 浏览
添加回答
举报