const boost::array<T,N> or boost::array<const T,N>?
const boost::array<T,N> or 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>
。
真是风格上的不同。
如果您尝试在const array
上调用assign
,编译器错误提示没有匹配的函数。如果您对array<const T>
执行相同的操作,它将指向assign
内部的无效操作。
我认为const array
更好地表达了意图,看起来更像相应的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[]
。
相关文章:
- EASTL矢量<向量<int>>连续的
- C++11 中不同类型的对象的 std::array 的替代方案
- constexpr begin of a std::array
- C++如果必须在编译时确定大小,std::array 有什么意义?
- OpenGL VBO Indexing ( How to compute Index Array)
- 标准::unordered_map 中的 std::array 的值初始化
- "Warning: Comma within array index expression"但逗号分隔函数参数
- 确保编译时的特定 std::array 位置
- std::array的长度有大小限制吗?
- 将 std::array 移动到另一个 std::array
- 首先按给定顺序打印所有数字,然后使用 Array 打印所有字符和其他符号
- 为什么 std::shared_ptr 被认为是"heavy"和"expensive",但 std::array "same perfprmance as plain (c-style) arrays
- 将 **float array 从 C++ Dll 传递给 python
- std::bind on statd::array 的运算符 []
- 检查输入 std::array 指针数据是否等于某个常量数组
- 我可以安全地复制矢量<array>吗?
- 解析问题 - 预期的非限定 ID - #include <array> 编译错误
- 如何读/写或遍历 std::array 中的特定元素范围?
- 通过 host() 从 af::array 检索数据会导致错误的数据
- 是否可以使用 std::array 作为 POD 结构的数据容器?