【发布时间】:2021-03-20 06:20:09
【问题描述】:
std::array 有一个内置方法empty() 来检查数组是否为空。如从here复制的示例:
#include <array>
#include <iostream>
int main()
{
std::array<int, 4> numbers {3, 1, 4, 1};
std::array<int, 0> no_numbers;
std::cout << std::boolalpha;
std::cout << "numbers.empty(): " << numbers.empty() << '\n';
std::cout << "no_numbers.empty(): " << no_numbers.empty() << '\n';
}
有什么方法可以检查数组是否已声明,大小固定,但未显式初始化?
说,像这样?
std::array<int,4> a;
std::array<int,4> b;
a = {1,2,3,4}; //a holds some explicit values
//do not assign values to b
//how to tell the different state of a and b?
【问题讨论】:
-
没有。读取一个未初始化的变量就是UB,在实践中往往会导致得到垃圾值,无法与初始化数组的内容区分开来。
-
为了使这个功能存在,需要单独跟踪数组的状态(已初始化或未初始化)。但是
std::array与 C 数组相比没有内存开销,因此它无法支持。您可以尝试std::optional<std::array<int, 4>>向您的数组添加某种定义明确的“未指定”状态。 -
即使使用常规数组,您也无法判断常规数组是否已初始化。垃圾
0或1(或任何您的初始值)就像使用0或1初始化数组一样。