【发布时间】:2020-09-01 20:20:53
【问题描述】:
我开始使用 C++ 并看到课程/教程的作者对变量进行零初始化,并开始想知道为什么零初始化甚至是一个选项?您可以只识别变量并稍后分配一个值。有性能优势吗?或者这样读者可以更好地理解代码?
C++ 示例:
选择1:
#include <iostream>
int main()
{
int x{ }; //<-- difference here
std::cout << "Enter a number: ";
std::cin >> x;
std::cout << "You entered: " << x << '\n';
return 0;
}
选择2:
#include <iostream>
int main()
{
int x; //<-- difference here
std::cout << "Enter a number: ";
std::cin >> x;
std::cout << "You entered: " << x << '\n';
return 0;
}
这两个选项您将获得相同的输出。
也许是我忘记了一些琐碎的事情(也没有在网上找到)。
【问题讨论】:
-
在旧版本的 C++ 中,如果
std::cin失败,它将使对象保持不变。所以在旧版本的 C++ 中,如果std::cin失败,第二个示例实际上是未定义的行为。在较新版本的 C++ 中,第二个选项很好。 -
任何 API 调用都需要牢记这一点。有时“out”参数只有在成功时才会改变。
-
如果您对
int进行零初始化,在该int将始终在被读取之前被覆盖,我希望编译能够做出该决定并删除初始化。因此,即使没有必要,显式初始化变量通常也无害。 -
@SamimMaschal 函数可以成功也可以失败。在控制台 I/O 的情况下,如果控制台在操作系统层由于某种未知原因(即内存不足等)失败,或者如果用户的输入与读取的预期不匹配,则读取操作可能会失败(即,用户在需要整数的地方输入字母等)。如果任何函数有一个指示成功/失败状态的输出值,你应该时刻注意它。
-
如果在两个程序中都输入“z”会发生什么?你预计会发生什么?
标签: c++ initialization theory