[英]Initialize a static const non-integral data member of a class
考虑下面的示例程序:
#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非整数数据成员的唯一方法吗? Line1是否在进行日期成员数据的初始化?
当然,以及提供对象的定义。 请注意,这只能在单个转换单元中完成,因此,如果类定义在头文件中,则应在源文件中。
Line1是初始化静态const非整数数据成员的唯一方法吗?
在C ++ 03中是这样。 在C ++ 11中, const
文字类型的任何静态成员都可以在类定义中具有初始化程序。 如果成员是“ odd-used”(仍然使用),则仍然需要一个成员的定义(大致来说,如果您执行任何需要其地址的操作,而不仅仅是其值)。 在这种情况下,定义又需要位于一个转换单元中,并且必须没有初始化程序(因为类定义中已经存在一个初始化程序)。
在当代C ++中,您可以内联初始化任何常量表达式 。 这需要更改语法:
class test
{
public:
static constexpr float data = 10.0f;
};
float constexpr test::data;
data
定义 ,包括设置其值。 编辑:正如Mike Seymor所指出的,第二名已经过时。 根据新的C ++ 11标准,1998和C ++ 03标准仅为整数类型保留的替代语法已扩展到所有常量,无论其类型如何。
2。
在C ++ 11中,您可以说
class test {
public:
constexpr static float data = 10.0; // data is implicitly const
};
在C ++ 03中,是。
Line1是否在进行日期成员数据的初始化?
是。
Line1是初始化静态const非整数数据成员的唯一方法吗?
是。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.