描述我的问题的代码:
#include <iostream>
using namespace std;
int main()
{
const int size = 10;
int a[size];
a[0] = 5;
for (size_t i = 0; i < size; i++)
cout << (a[i] == empty() ? 0 : a[i]);
}
功能empty()- 某种变量初始化检查。是否有可能在不使用下限的情况下以某种方式找出变量被赋值(也就是说,如果数组必须有正数,那么数组元素可以用零初始化)?
数组
a未初始化。该标准明确禁止读取未初始化的数据。因此,您没有合法的方法来检查是否存在某些内容(与带有 .js 的 JavaScript 不同undefined)。但是你可以这样做
int a[size] = {0};:这是一种特殊的符号,它将用零填充数组。现在您可以在为元素赋值之前检查其单元格。一些后续说明:
int a[size] = {0};这确实是一个特殊的符号。例如int a[size] = {1};,它不会用 1 填充所有内容,而是用 1 填充第一个元素,其余元素用 0 填充。零可以在 C++ 中省略(不是在 C 中):int a[size] = {};- 一切都将用零填充。当然,该标准并不禁止任何事情。访问未初始化的变量会产生未定义的行为。也就是说,标准的作者不知道你的程序从现在开始会做什么。...
我在这里写道:“但是编译器作者知道:在所有流行的平台上,都会从变量中读取随机值。” 当clang简单地抛出对未初始化变量的访问时,他们立即给了我一个例子。
...在这里您可以选择:要么遵循标准(好的),要么确保编译器按照您的期望消化您的代码(也可以,如果您知道自己在做什么,并且已经检查了所有您需要的编译器,以及您需要的所有编译标志并检查生成的汇编代码并且不这样做,这是不正常的)。