考虑下面的片段:
#include <iostream>
int f(int i) {
return ++i;
}
int i = f(i);
int main() {
std::cout << i << '\n';
}
在 C++ 标准中,我可以在哪里找到对上面的全局变量 i
的初始化的支持?
最佳答案
非局部变量的初始化在标题为“非局部变量的初始化”[basic.start.init] 的章节中进行了描述。在 C++11 中,这是 3.6.2。
使用 =
进行初始化,初始化器可以是花括号列表或任何赋值表达式,包括函数调用,如 [dcl.init] (C++11 8.5) 中所指定。
它具有静态存储持续时间,因此它首先在静态初始化期间根据 3.6.2/2 进行零初始化:
Variables with static storage duration [...] shall be zero-initialized before any other initialization takes place.
然后在动态初始化期间从其初始化器初始化它,因为它不符合常量初始化的条件(因为初始化器不是常量表达式)。它将静态初始化的零值传递给函数,该函数递增它并返回 1。该值 1 用于完成初始化。
关于c++ - 在 C++ 标准中的什么地方可以找到对在全局范围内调用函数的支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28563974/