我可以在C++标准中找到在全局范围内调用函数的支持吗?

Ayr*_*osa 2 c++ language-lawyer

考虑下面的代码:

#include <iostream>
int f(int i) {
    return ++i;
}
int i = f(i);

int main() {
    std::cout << i << '\n';
}
Run Code Online (Sandbox Code Playgroud)

我可以在C++标准中找到对i上面全局变量初始化的支持吗?

Mik*_*our 7

非局部变量的初始化在标题为"非局部变量的初始化",[basic.start.init]的章节中描述.在C++ 11中,那是3.6.2.

初始化使用时=,初始化器可以是支撑列表,或任何赋值表达式,包括函数调用,如[dcl.init](C++ 11 8.5)中所指定.

这具有静态存储持续时间,因此它在静态初始化期间每3.6.2/2初始化为零:

具有静态存储持续时间的变量应在任何其他初始化发生之前进行零初始化.

然后在动态初始化期间从初始化器初始化它,因为它不满足恒定初始化的标准(因为初始化器不是常量表达式).它将静态初始化的零值传递给函数,函数递增它并返回1.该值1用于完成初始化.