【发布时间】:2020-07-29 04:39:38
【问题描述】:
我正在使用我的 C++ 编译器,我注意到一个全局变量的递归依赖,并且一个函数调用没有被拒绝。示例:
#include <iostream>
int foo();
int t = foo();
int foo()
{
std::cout << "Hello before main: " << t << "\n";
t = 10;
return t + 10;
}
int main()
{
std::cout << "Hello from main.\n";
}
这个编译后的程序打印出以下内容:
Hello before main: 0
Hello from main.
因此,当我使用声明 t 时,它依赖于 foo 函数,该函数又依赖于 t。 C++ 编译器通过在赋值表达式运行之前将 t 初始化为零来打破这个循环。
这让我很惊讶。根据标准,这是正确的行为还是我在这里调用了一些未定义的行为?
【问题讨论】:
标签: c++ initialization language-lawyer