考虑:
class x {
std::array<int, 4> data_;
public:
x() /*no reference to data_ here*/ {}
};
int
中的data_
元素是否置零,或者它们的值不确定?
通过扩展名在这种情况下也是如此:
class x {
std::variant<std::array<int, 4> /*other stuff here*/> data_;
public:
x() /*no reference to data here*/ {
data_.emplace<std::array<int, 4>>(/* no args */);
}
};
从std::array
documentation的构造函数部分中,我们可以看到:
按照
std::array
的规则初始化数组(请注意,默认初始化可能会导致非类T的值不确定)>重点矿
根据您的情况,您有一个aggregate initialization。 std::array<int>
匹配非类类型的定义,因此“默认初始化可能会导致不确定的值”