这两者有什么区别?当你需要一个固定大小的常量值数组时,你更喜欢哪一个?const boost :: array <T,N>或boost :: array <const T,N>?
const boost::array<int, 2> x = {0, 1};
boost::array<const int, 2> y = {0, 1};
谢谢。
这两者有什么区别?当你需要一个固定大小的常量值数组时,你更喜欢哪一个?const boost :: array <T,N>或boost :: array <const T,N>?
const boost::array<int, 2> x = {0, 1};
boost::array<const int, 2> y = {0, 1};
谢谢。
第二个将阻止你将它复制到一个新的非const阵列
boost::array<const int, 2> y = {0, 1};
boost::array<int, 2> y1 = y; // error!
因为我期望的工作,我可能会用第一个选项去。将第二个传递给期望boost::array<T, N>
的模板将阻止这些模板修改其参数(即使它是副本)。第一个将“正常工作”,因为参数的类型为boost::array<int, 2>
。
A const int
和int
在这方面是几乎相同的。你无法对array<int,2>
做任何事,你无法做到array<const int, 2>
。如果不是int
你有一些课程,那么会有区别。与array<const MyClass, 2>
你将无法调用数组元素的非const方法。
const array<MyClass, 2>
更强,你不能修改任何东西。您不能调用元素和的非const方法,您不能通过替换元素来改变阵列本身,比如使用operator[]
。
您无法通过其他选择下的operator []'来替换元素。 – Potatoswatter 2011-04-09 09:19:54
这真的是一种风格上的差异。
如果您尝试在const array
上调用assign
,则编译器错误表示没有匹配的函数。如果您对array<const T>
也这样做,则会指向assign
内的无效操作。
我认为const array
表示意图更好,看起来更像是相应的C风格的数组声明。但是我不会努力改变一些东西,例如在遗留代码中或在可能生成array<const T>
的模板中。
我会去** const array **。谢谢。 – pic11 2011-04-09 09:53:17
谢谢!顺便说一句,为什么通过值忽略const限定符?参数类型演绎是如何工作的? – pic11 2011-04-09 12:45:22
@pic是。它认为这是一件好事。请参阅http://cpp-next.com/archive/2011/04/appearing-and-disappearing-consts-in-c/ – 2011-04-09 12:50:50
Schaub上的评论。是的,它非常有意义。感谢您的链接。 – pic11 2011-04-09 12:55:08