Ril*_*ley 17 c++ arrays pointers contiguous c++11
内存是std::array连续的吗?以下是有效/良好的做法吗?
std::array<type1,Num> arr = //initialize value
type1 * ptr = &arr[0];
Run Code Online (Sandbox Code Playgroud)
我可以传递ptr给期望c风格数组的函数吗?
Xeo*_*Xeo 29
是的,它是连续的,因为它基本上(实际上)是a type arr[10];,但是具有类似STL的界面.它也不会在最轻微的挑衅下腐烂.
您可以安全地传递&arr[0]给期望C风格数组的函数,这是它的设计目标.但是,要将它与STL算法一起使用,只需使用begin和end函数:
// either members
std::sort(arr.begin(), arr.end());
// or free from <iterator>
std::sort(std::begin(arr), std::end(arr));
Run Code Online (Sandbox Code Playgroud)
对于语言律师部分,§23.3.2.1 [array.overview] p1:
标题
<array>定义了一个类模板,用于存储固定大小的对象序列.数组支持随机访问迭代器.array<T, N>存储N元素类型的实例T,因此size() == N是不变的.a的元素array是连续存储的,这意味着如果a是aarray<T, N>则它遵循&a[n] == &a[0] + n所有的身份0 <= n < N.
而且§23.3.2.1 [array.overview] p2:
数组是可以使用语法初始化的聚合(8.5.1)
array<T, N> a = {初始化列表};
此外,p3列出以下成员std::array:
T elems[N]; // exposition only
[ 注意:成员变量elems仅用于展示,以强调这array是一个类聚合.该名称elems不是array界面的一部分.- 尾注 ]