kot*_*API 5 c++ visual-studio-2010 visual-c++
#include <iostream>
using namespace std;
int weirdVariable = weirdVariable + 1;
int main() {
cout<< weirdVariable ;
return weirdVariable ;
}
Run Code Online (Sandbox Code Playgroud)
我只是想知道这个未初始化的变量是如何不返回错误并返回1.所以我的问题是,如何/为什么它返回值"1".这个程序在逻辑上是否有效?还是有些瑕疵?
它不是未初始化的.具有静态存储持续时间的变量(如全局变量)在进一步初始化之前首先进行零初始化.因此weirdVariable最终得到值1.
§3.6.2[basic.start.init]具有静态存储持续时间(3.7.1)或线程存储持续时间(3.7.2)的变量应在任何其他初始化发生之前进行零初始化(8.5).
如果你要声明wierdVariable为local main,那么它将是未初始化的.这将为您提供未定义的行为,因为对未初始化的对象执行左值到右值的转换(读取:使用值)会给出未定义的行为.
§4.1[conv.lval]如果glvalue引用的对象未初始化,则需要进行此转换的程序具有未定义的行为.
| 归档时间: |
|
| 查看次数: |
567 次 |
| 最近记录: |