未定义结构的静态常量成员
static const member of a struct is not defined
使用符合03标准的编译器(gcc-3.3.2的安全关键变体(。该标准规定必须定义静态成员对象(9.4.2(4((。它还指出,单一定义规则成立,但不需要诊断(9.4.2(5((。以下代码是否有效?
struct fred
{
static const int JOE=1;
int m_joe;
fred() : m_joe(JOE) {}
};
也就是说,没有"static const int fred::JOE;"。我问是因为我们(显然(有一个案例,其中从未定义模板类中的静态 const int,并且代码在某些上下文中有效,但在其他上下文中不起作用。我用枚举替换了静态 const int,它在所有情况下都有效。我们肯定是在未定义行为的土地上吗?
static const int
定义编译时常量;恐怕我不能参考标准的特定部分。唯一需要它定义的时候是尝试获取它的地址或创建引用。如果您改用枚举,编译器将在您需要引用时为您创建一个临时变量。
struct test
{
static const int one = 1;
enum { two = 2 };
};
void printint(const int & i)
{
cout << i << endl;
}
int main() {
printint(test::one); // error
printint(test::two); // no error
return 0;
}
相关文章:
- 私有类型的静态常量成员
- constexpr构造函数需要常量成员函数时出现问题
- Clang 格式 10.0 与 5.0 常量成员函数的格式不同
- 为什么"具有常量成员的结构"类型的指针不能指向"具有非常量成员的结构"?
- 常量成员函数中成员变量的类型
- 如何处理运算符=中的常量成员?
- 常量成员和没有setter的私有成员之间有什么区别
- C++:允许临时对象调用非常量成员函数的设计理念是什么?
- 移动具有常量成员的类的构造和分配
- ARM C++编译器不会编译具有可变常量成员的结构
- 强制在编译时计算类的类的常量成员
- 类中常量成员函数的 c++ 链接错误
- 为什么常量成员可以初始化两次?
- 专用常量成员函数的成员检测
- 与其他静态const成员初始化静态常量成员
- 具有静态和常量成员变量的对象
- 结构中的常量成员即使在初始化后也返回 0
- 在非常量成员函数中,为什么点这个非常量,而 decltype 指针这是常量
- 有没有一种通用方法来"unprotect"静态常量成员?
- 如何初始化共享复杂初始化代码的多个常量成员变量?