考虑:
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 */);
}
};
编辑:
扩展:有没有办法可以从变体中获得所需的行为(不初始化数据)。
如果我将这两个示例配对在一起,我应该能够做到:
struct no_init_array {
std::array<int, 4> array;
no_init_array() { } //does nothing
};
class x {
std::variant<no_init_array/*other stuff here*/> data_;
public:
x() /*no reference to data here*/ {
//call default ctor of no_init_array
//which does not init the std::array (I hope)
data_.emplace<no_init_array>(/* no args */);
}
};