未使用全局的静态初始化程序

Ses*_*ing 3 c++ static-initialization

如果我有一个从未使用的内部链接的全局,它的初始化程序是否可以保证运行?例如:

static int x = SideEffectfulFunction();
Run Code Online (Sandbox Code Playgroud)

要么

namespace {
    int x = SideEffectfulFunction();
}
Run Code Online (Sandbox Code Playgroud)

SideEffectfulFunction()保证被调用,即使x不会被引用?或者x删除是否合法?

Cur*_*ous 9

是的,标准保证了这一点

静态存储时间[basic.stc.static]

2如果具有静态存储持续时间的变量具有初始化或具有副作用的析构函数,则即使它看起来未被使用也不应被消除,除非可以按照15.8中的规定消除类对象或其复制/移动.