![](/img/trans.png)
[英]In c++, `expressions` are allowed in global scope only to initialize global objects. Where can I find this in the Standard?
[英]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
初始化的支持?
非局部變量的初始化在標題為“非局部變量的初始化”,[basic.start.init]的章節中描述。 在C ++ 11中,那是3.6.2。
使用=
初始化,初始化器可以是支撐列表,或任何賦值表達式,包括函數調用,如[dcl.init](C ++ 11 8.5)中所指定。
這具有靜態存儲持續時間,因此它在靜態初始化期間每3.6.2 / 2初始化為零:
具有靜態存儲持續時間的變量應在任何其他初始化發生之前進行零初始化。
然后在動態初始化期間從初始化器初始化它,因為它不滿足恆定初始化的標准(因為初始化器不是常量表達式)。 它將靜態初始化的零值傳遞給函數,函數遞增它並返回1.該值1用於完成初始化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.