【发布时间】:2018-01-18 23:47:39
【问题描述】:
考虑以下由两个TU 组成的完整程序:
// 1.cpp
bool init() { /* ... */ }
const auto _{init()};
// 2.cpp
int main() {}
问题:是否可以保证 _ 在某个时候被初始化(我不在乎何时)?
现在考虑由一个TU组成的程序:
// 1.cpp
bool init() { /* ... */ }
const auto _{init()};
int main() {}
请注意,_ 不是 odr-used。
但是,在第二种情况下,main() 是否可以称为odr-used,因为它在程序运行时被调用(在某种程度上)“被实现引用”?
如果main() 是odr-used,这是否意味着_ 保证被初始化,即使它不是odr-used?
编辑:
这就是en.cppreference.com 所说的延迟动态初始化:
如果没有从给定的翻译单元中使用的变量或函数, 该翻译单元中定义的非局部变量可能永远不会 已初始化(这模拟了按需动态库的行为)
在阅读我的两个示例时,您能回答我的问题吗?
【问题讨论】:
-
“延迟动态初始化”是什么意思?我不明白为什么这里会发生任何动态或延迟的事情。