是否应该在 C++ 头文件中初始化 const 静态变量?

2023-11-25

my_test.h

#ifndef MY_TEST  
#define MY_TEST

struct obj {
  int x;
  int y;
};

class A {
private:
  const static int a=100;
  const static obj b;
};

const obj A::b={1,2};

#endif

使用该头文件编译cpp时,报错'multiple definition of 'A::b'发生。

  1. 当我已经使用保护宏时为什么会出现这种情况?
  2. 为什么A::a不产生错误? (我不会写代码const static obj b={1,2} in class A)

当我已经使用保护宏时为什么会出现这种情况?

标头防护仅防止在同一个文件中多次包含标头文件内容翻译单位不跨越多个翻译单元。

why is A::a没有错误消息(我无法编写代码const static obj b={1,2} in class A)

类内初始化编译器允许将其作为 const 文字类型的静态数据成员的特殊情况。您的示例之一是类内初始化。

const A::b在包含标头的每个翻译单元中定义相同的符号名称,从而破坏一个定义规则.

您需要将定义移至唯一一个源 cpp 文件,以便仅定义一次。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否应该在 C++ 头文件中初始化 const 静态变量? 的相关文章

随机推荐