在 C++ 标准中的什么地方可以找到对在全局范围内调用函数的支持?
Where in the C++ Standard can I find support for invoking a function in global scope?
考虑以下代码段:
#include <iostream>
int f(int i) {
return ++i;
}
int i = f(i);
int main() {
std::cout << i << '\n';
}
我可以在 C++ 标准的哪个位置找到对上述全局变量 i
初始化的支持?
non-local 变量的初始化在标题为 "Initialization of non-local variables"、[basic.start.init] 的章节中进行了描述。在 C++11 中,这是 3.6.2.
使用 =
进行初始化,初始化器可以是花括号列表或任何赋值表达式,包括函数调用,如 [dcl.init] (C++11 8.5) 中所指定。
这具有静态存储持续时间,因此它是第一个 zero-initialised 在静态初始化期间根据 3.6.2/2:
Variables with static storage duration [...] shall be zero-initialized
before any other initialization takes place.
然后在动态初始化期间从其初始化器初始化它,因为它不符合常量初始化的条件(因为初始化器不是常量表达式)。将静态初始化的零值传递给函数,函数将其递增 returns 1。该值 1 用于完成初始化。
考虑以下代码段:
#include <iostream>
int f(int i) {
return ++i;
}
int i = f(i);
int main() {
std::cout << i << '\n';
}
我可以在 C++ 标准的哪个位置找到对上述全局变量 i
初始化的支持?
non-local 变量的初始化在标题为 "Initialization of non-local variables"、[basic.start.init] 的章节中进行了描述。在 C++11 中,这是 3.6.2.
使用 =
进行初始化,初始化器可以是花括号列表或任何赋值表达式,包括函数调用,如 [dcl.init] (C++11 8.5) 中所指定。
这具有静态存储持续时间,因此它是第一个 zero-initialised 在静态初始化期间根据 3.6.2/2:
Variables with static storage duration [...] shall be zero-initialized before any other initialization takes place.
然后在动态初始化期间从其初始化器初始化它,因为它不符合常量初始化的条件(因为初始化器不是常量表达式)。将静态初始化的零值传递给函数,函数将其递增 returns 1。该值 1 用于完成初始化。