这是一个不错的旧 C 数组:
int a[10];
这是一个很好的旧 C 数组,它是 const
:
const int b[10];
在 C++ 中,似乎有两种方法可以定义 std::array
即 const
:
std::array<const int, 10> c;
const std::array<int, 10> d;
这两个定义是等价的吗?如果是这样,惯用语是什么?如果不是,有什么区别?
最佳答案
好吧,原来的 const int b[10];
仅在您可以初始化数组时才有用,因此两个 std::array
示例都没有在实践中工作。
1:
std::array<const int, 10> c;
这是最接近 const int c[10];
。问题是它没有默认构造函数,并且因为元素不是可变的,所以使用它毫无值(value)。您必须在构造函数中为其提供一些初始化。照原样,它会给出一个编译器错误,因为默认构造函数没有初始化元素。
这段代码意味着 c
是可变的,但元素本身不是。然而,在实践中,c
上没有不影响元素的突变。
2:
const std::array<int, 10> d;
这意味着 d
是不可变的,但元素是可变类型 int
。因为 const
将传播给成员,这意味着调用者仍然不能改变元素。与上面的示例类似,您需要初始化 d
,因为它是 const
。
实际上,它们在可变性方面的行为相似,因为array
上的可变操作总是接触元素。
关于c++ - 常量数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7791170/