gpt4 book ai didi

c++ - 是否在没有对象未定义行为的情况下访问静态 struct::var?

转载 作者:行者123 更新时间:2023-12-03 06:51:32 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





static variable link error [duplicate]

(2 个回答)


去年关闭。




根据 Compiler Explorer,只有一些人会构建此代码:

struct s { static int i; };

int main( int argc, char *argv[] )
{
s::i = 1;
return 0;
}
大多数较新的 C++ 编译器无法链接。
  • GCC 4.7.2 有效,4.7.3 及更新版本失败
  • Clang 3.2 有效,3.4 及更新版本失败
  • msvc 适用于所有版本

  • 那么,这是未定义的行为还是应该工作?

    最佳答案

    此代码违反了 One Definition Rule (ODR) ,这需要程序中使用的每个实体的单一定义。s::i没有定义在程序中,但您正在使用它,因此代码违反了 ODR。任何违反 ODR 的行为都会导致代码格式错误,无需诊断。这意味着编译器可以做任何它想做的事情,包括拒绝代码,或者编译它并生成一个可执行程序(它可以做任何它想做的事情)。

    关于c++ - 是否在没有对象未定义行为的情况下访问静态 struct::var?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63783848/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com