这两者有什么区别?当您需要固定大小的常量值数组时,您更喜欢哪一个?
const boost::array<int, 2> x = {0, 1};
boost::array<const int, 2> y = {0, 1};
感谢。
答案 0 :(得分:6)
第二个将阻止您将其复制到新的非const数组
boost::array<const int, 2> y = {0, 1};
boost::array<int, 2> y1 = y; // error!
由于我希望它可以工作,我可能会选择第一个选项。将第二个传递给期望boost::array<T, N>
的模板将阻止这些模板修改其参数(即使它是副本)。第一个将“正常工作”,因为参数将具有类型boost::array<int, 2>
。
答案 1 :(得分:2)
这真的是一种风格上的差异。
如果您尝试在assign
上调用const array
,则编译错误表示没有匹配的函数。如果对array<const T>
执行相同操作,则会指向assign
内的无效操作。
我认为const array
更好地表达了意图,看起来更像是相应的C风格数组声明。但我不会努力改变一些事情,例如在遗留代码中或在可能生成array<const T>
的模板内。
答案 2 :(得分:0)
此上下文中的const int
和int
几乎相同。您无法对array<int,2>
执行任何操作,而array<const int, 2>
无法对int
执行任何操作。如果不是array<const MyClass, 2>
你有一些课程,那么就会有所不同。使用const array<MyClass, 2>
,您将无法在数组的元素上调用非const方法
operator[]
更强大,因为你不能修改任何东西。你不能调用和元素的非const方法,你不能通过替换元素来改变数组本身,比如使用{{1}}。