static const double cannot have an in-class initializer. why is it so?
具有以下代码的problum是"const double"类型的静态成员,不能具有类内初始值设定项。为什么只适用于下面代码中的"const double"?请帮帮我。
1 2 3 4 5 6 7 8 9 10 | class sample{ static const char mc = '?'; static const double md = 2.2; static const bool mb = true; }; const char sample::mc; const double sample::md; const bool sample::mb; int main(){ } |
该逻辑电路执行的语言是C + + 03标准基于以下的理由。
在C + +对象初始化器是一种部分的定义。你所写的类的静态成员的内幕,其实是一只"宣言"。所以说,正式指定的静态初始化器的成员,任何直接的类是"不正确"的内幕。这是相反的声明定义的概念/通用的语言。你说的任何静态数据已被确定的中间级后反正。这是你的机会,在这里你将有一个到指定的初始值。
从这一个例外的规则是为静态整数常数,这些常数,因为在C++中可以自由表达的积分常数(冰)。它的一个重要的角色在游戏中的语言,和他们的预期工作阶积分常数的值必须是可见的所有的翻译单元。为了使可见一些常数的值在所有的翻译单元,它是在点光"。获得允许指定的语言,直接在类初始化。
许多的硬件平台,以及如何在线operands常数整数可以直接进入嵌入式机器指令。或可以取代常数(或完全两样的,例如,可以实现通过
非整数的类型没有任何功能上类似于冰。另外,硬件平台不允许嵌入的非正常积分的机械operands直接命令。因为这个原因,"从上述的例外规则"并没有延伸到非整数类型。它也没有简单的实现。
C + +的前11个积分,只
11这与C + +,不再适用。
我使用的编译器(而不是
1 2 | static_consts.cpp:3:29: error: ‘constexpr’ needed for in-class initialization of static data member ‘const double sample::md’ of non-integral type [-fpermissive] static_consts.cpp:7:22: error: ‘constexpr’ needed for in-class initialization of static data member ‘const double sample::md’ of non-integral type [-fpermissive] |
我只是接受该要约。
1 2 3 4 5 6 7 8 9 | class sample{ static const char mc = '?'; static constexpr double md = 2.2; static const bool mb = true; }; const char sample::mc; const bool sample::mb; int main(){ } |
现在它只是compiles精细(C + +)。