考虑下面的示例程序:
#include <iostream>
using namespace std;
class test
{
public:
static const float data;
};
float const test::data = 10; // Line1
int main()
{
cout << test::data;
cout << "\n";
return 0;
}
请注意示例代码中的评论Line1
。
问题:
Line1
是否正在初始化日期成员data
?Line1
是初始化静态const非整数数据成员的唯一方法吗?答案 0 :(得分:8)
Line1是否正在初始化日期成员数据?
当然,除了提供对象的定义之外。请注意,这只能在单个翻译单元中完成,因此如果类定义位于头文件中,则应该在源文件中。
Line1是初始化静态const非整数数据成员的唯一方法吗?
在C ++ 03中它是。在C ++ 11中,const
文字类型的任何静态成员都可以在类定义中具有初始化。你仍然需要一个成员的定义,如果它是“odr-used”(粗略地说,如果你做任何需要它的地址,而不仅仅是它的价值)。在这种情况下,定义再次需要在单个翻译单元中,并且不能具有初始化(因为类定义中已经有一个)。
答案 1 :(得分:4)
data
的定义,其中包括设置其值。答案 2 :(得分:4)
在现代C ++中,您可以初始化任何常量表达式内联。这需要更改语法:
class test
{
public:
static constexpr float data = 10.0f;
};
float constexpr test::data;
答案 3 :(得分:2)
2
在C ++ 11中,你可以说
class test {
public:
constexpr static float data = 10.0; // data is implicitly const
};
在C ++ 03中,它是的。
答案 4 :(得分:0)
Line1是否正在初始化日期成员数据?
是
Line1是初始化静态const非整数数据的唯一方法 构件?
是