inf*_*ler 3 c++ arrays c++11 list-initialization stdarray
现在,我们有std::array,std::vector和括号的初始化,是C风格数组仍然需要?
Xeo*_*Xeo 12
C风格的阵列仍然有一件事std::array就是尺寸减少.您可以使用C风格的数组执行以下操作,但不能实际使用std::array:
int arr[] = {1,2,3,4,5}; // no explicit size
Run Code Online (Sandbox Code Playgroud)
现在,我们还有另一个替代C型阵列的候选者:std::initializer_list.在内部,它由某种类似阵列的存储支持,但观察:
#include <initializer_list> // needed
// ...
auto list = {1,2,3,4,5}; // no explicit size, and no explicit type!
Run Code Online (Sandbox Code Playgroud)
并且decltype(list) == std::initializer_list<int>.但是,目前,您无法std::initializer_list在编译时查询此类的大小或元素,因为未标记成员函数constexpr(尚未在C++ 14中修复).此外,一个更大的问题:std::initializer_list只提供const- 元素的访问,所以你不能改变它们.
但请注意:std::initializer_lists具有引用语义,如果它们是从函数返回的,那么您将对某些存储有一个悬空引用.
最后,我想说还是有在某些狭窄的情况和壁龛C风格数组的地方,但在一般情况下,我们可以更好的选择现在std::array和std::initializer_list.
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |