这两者有何不同?当您需要一个固定大小的常量值数组时,您会更喜欢哪个?
感谢您的信任。
const boost::array<int, 2> x = {0, 1};
boost::array<const int, 2> y = {0, 1};
感谢您的信任。
boost::array<const int, 2> y = {0, 1};
boost::array<int, 2> y1 = y; // error!
我认为第一种方法应该可以正常工作,因此我会选择第一种。如果将第二种方法传递给期望 boost::array<T, N>
类型的模板,则即使参数是副本,这些模板也无法修改其参数。而第一种方法会“正常工作”,因为参数将具有类型 boost::array<int, 2>
。
这实际上是一种风格上的差异。
如果你尝试在一个const数组
上调用assign
,编译器将会报错,指出没有匹配的函数。如果你对一个array<const T>
执行相同的操作,它会指向assign
中的无效操作。
我认为const数组
更能表达意图,并且看起来更像对应的C风格数组声明。但是我不会努力去改变事情,例如在遗留代码中或在可能生成array<const T>
的模板内部。
const int
和int
基本上是相同的。对于array<int,2>
,你无法做到的事情也同样适用于array<const int, 2>
。如果你有一些类而不是int
,那么就会有所不同。对于array<const MyClass, 2>
,你将无法在数组元素上调用非const方法。const array<MyClass, 2>
更强大,因为你不能修改任何东西。你不能调用元素的非const方法并且你不能通过替换元素来改变数组本身,比如使用operator[]
。operator[]
替换元素。 - Potatoswatter