未定义结构的静态常量成员

static const member of a struct is not defined

本文关键字:常量 成员 静态 结构 未定义      更新时间:2023-10-16

使用符合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;
}