c++ - 编译器使用参数与不使用参数做什么?
问题描述
我有一个关于 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++。
解决方案
第一个,x
默认初始化为不确定的值,然后cout << x
导致未定义的行为,意味着一切皆有可能。
具有自动和动态存储持续时间的非类变量的默认初始化会产生具有不确定值的对象
第二个,int y();
声明一个名为 的函数y
,它没有参数并返回int
。For cout << y
,y
将衰减为函数指针,它可以bool
隐式转换为然后你会得到1
(即true
。你可以使用std::boolalpha
likestd::cout << std::boolalpha << y
来获取输出true
)。
第三个,z
直接用 value初始化2
,然后cout << z
你会得到2
.
带有 clang 的 LIVE 示例,请注意编译器给出的所有警告消息。
推荐阅读
- javascript - 简而言之,如何实例化作为参数给出的不同函数
- delphi - 有没有办法在不包括原始文件的目录结构的情况下创建 TZipfile?
- hyperlink - 在雪花表字段中嵌入超链接
- html - flexbox中的大型primeng组件屠夫css
- arrays - char数组C末尾的奇怪字符
- python - TypeError:“系列”对象是可变的,因此它们不能被散列来修改和转换成数据框的 excel 文件
- javascript - 未捕获的 SyntaxError:Inline JS 上的标记无效或意外。JS脚本在浏览器上中断
- python - 用于数据科学的 Python 中使用的标准、稳定的文件格式是什么?
- javascript - 关于 JavaScript 中的箭头函数
- javascript - 如何根据内容量动态调整固定 div 中的文本大小?