关于C ++编译器,我有一个不重要的问题。以下代码输出
1
2
3
,我不知道为什么。用空参数声明它完全没有括号有什么区别?
#include <iostream>
using namespace std;
int main()
{
int x;
cout << x << endl;
int y();
cout << y << endl;
int z(2);
cout << z << endl;
return 0;
}
编译器是g ++。
答案 0 :(得分:4)
第一个x
是default initialized,其值不确定,然后cout << x
导致undefined behavior,意味着一切皆有可能。
具有自动和动态存储持续时间的非类变量的默认初始化会产生具有不确定值的对象
第二个int y();
声明了一个名为y
的函数,该函数没有参数,并返回int
。对于cout << y
,y
将衰减为函数指针,该函数指针可以隐式转换为bool
,然后您将得到1
(即true
。您可以使用std::boolalpha
像std::cout << std::boolalpha << y
一样获得输出true
)。
第三个z
是direct initialized,其值为2
,那么cout << z
会得到2
。
LIVE sample with clang,请注意编译器给出的所有警告消息。