dor*_*rge -1 c++ static-members visual-studio-2010 visual-c++
当我将static const char[]我的类作为公共字段添加到我的类时,编译器会给我错误,但是static const int它很好.为什么,我该如何解决?
class example
{
public:
static const int num2 = 5;// fine
static const char num[] = "test";// problem
};
Run Code Online (Sandbox Code Playgroud)
C++语言不支持非整数和非枚举类型的静态成员的类内初始化程序.整数和枚举类型的成员给予特殊处理.您可以在类定义中为它们提供初始化程序.所有其他类型必须在外部定义.
这样做是因为在很大比例的情况下,常量积分值被用作编译时常量,作为程序中的rvalues.它们在实际存储中不需要空间(即不需要物理定义).同时,编译器可以从了解每个转换单元中的积分常量的值中获益(例如,优化,将整数操作数直接嵌入到机器指令中等).这不适用于(或适用于更小程度)非 - 整体类型.
您必须在类之外定义静态成员并在那里提供初始化程序.
class example
{
public:
static const int num2 = 5;
static const char num[];
};
const char example::num[] = "test";
Run Code Online (Sandbox Code Playgroud)
请记住,要遵守ODR,成员定义必须放在一个且只有一个实现文件中.不要尝试将其放入头文件中.
| 归档时间: |
|
| 查看次数: |
278 次 |
| 最近记录: |