nit*_*ian 8 c++ initialization const static-members
考虑下面的示例程序:
#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;
}
Run Code Online (Sandbox Code Playgroud)
请注意Line1示例代码中的注释.
问题:
Line1做日期成员的初始化data?Line1初始化静态const非整数数据成员的唯一方法吗?Line1是否正在初始化日期成员数据?
当然,除了提供对象的定义之外.请注意,这只能在单个翻译单元中完成,因此如果类定义位于头文件中,则应该在源文件中.
Line1是初始化静态const非整数数据成员的唯一方法吗?
在C++ 03中它是.在C++ 11中,任何const文字类型的静态成员都可以在类定义中具有初始化.你仍然需要一个成员的定义,如果它是"odr-used"(粗略地说,如果你做任何需要它的地址,而不仅仅是它的价值).在这种情况下,定义再次需要在单个翻译单元中,并且不能具有初始化(因为类定义中已经有一个).
在当代C ++中,您可以内联初始化任何常量表达式。这需要更改语法:
class test
{
public:
static constexpr float data = 10.0f;
};
float constexpr test::data;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8511 次 |
| 最近记录: |