不需要时进行静态初始化
Static initialization when it is not required
引自N3797 c++ 14最终工作草案3.6.2/3:
允许一个实现执行a的初始化具有静态存储持续时间的非局部变量初始化,即使这样的初始化不是必需的静态地,假设
-初始化的动态版本不改变值命名空间作用域的任何其他对象的初始化,和
—初始化的静态版本产生与初始化的变量将由动态的如果所有变量不需要初始化,则初始化静态初始化
所有变量对一个特定变量的初始化有什么要求?
如果可能,用例子描述后一点
当一个变量的初始化项引用另一个变量时,这一点很重要。
constexpr int f(int);
extern const int a = f(1); // not required to be statically initialized
extern const int b = a; // also not required to be statically initialized
constexpr int f(int x) { return x; }
现在假设实现选择静态初始化b
,但动态初始化a
。在这种情况下,b
的初始化会先于a
进行。您所询问的文本解释说,这不允许实现将b
初始化为零:即使b
先初始化,其值也必须是f(1)
,即1
。
相关文章:
- 使用g++静态初始化带有命名标签的嵌套C++结构
- 静态初始化的反义词是什么?
- 在静态初始化期间运行代码
- 结构数组的嵌入式C++静态初始化
- 初始化与类类型相同的静态成员(静态初始化顺序问题)
- 使用 constexpr 和 std::array 进行静态初始化来替换动态初始化的 std::vector 的闰年
- MSVC 2017 在单个翻译单元中违反静态初始化顺序
- VC++6 线程安全静态初始化
- 具有必要副作用的静态初始化被优化掉了
- 未使用全球的静态初始化器
- w/ w/结构带char缓冲液的静态初始化[]
- 静态初始化的对象不能放在块中尝试
- 功能指针的静态初始化
- lambda(或函数)C++中的静态初始化
- C++静态初始化顺序:添加到映射中
- 复杂类型数组的静态初始化
- C++ - 在派生类中静态初始化受基类保护的成员变量
- 静态初始化插件工厂
- 静态初始化包含功能指针的对象的constexpr std ::数组
- 找出静态初始化是否结束