当前位置:  开发笔记 > 编程语言 > 正文

std :: array <T,N>的大小是否保证等于T [N]的大小?

如何解决《std::array<T,N>的大小是否保证等于T[N]的大小?》经验,为你挑选了1个好方法。

看起来这个代码工作(所以它编译得很好),我在这里问的是:它是否保证sizeof(std :: array)与sizeof(equivalent_Carray)相同?

struct MyClass {
  std::array arr;  
  float carr[4];

  std::array cfunction() {
    std::array out;
    return out;
  }

  std::array function() {
    // Is this guaranteed to be the same as sizeof(carr) / sizeof(float)??
    std::array out;
    std::cout << sizeof(arr);
    return out;
  }
};

int main()
{
    MyClass obj;
    obj.function();
}

Lightness Ra.. 5

没有.

我们得到的唯一保证std::array是:

size()N;

&a[n] == &a[0] + n为了所有人0 <= n < N;

数组是可以使用语法初始化的聚合(8.5.1)

array a = { initializer-list };

没有什么可以阻止实现者添加一个尾随成员,虽然我知道没有理由为什么会这样做.



1> Lightness Ra..:

没有.

我们得到的唯一保证std::array是:

size()N;

&a[n] == &a[0] + n为了所有人0 <= n < N;

数组是可以使用语法初始化的聚合(8.5.1)

array a = { initializer-list };

没有什么可以阻止实现者添加一个尾随成员,虽然我知道没有理由为什么会这样做.


@Dean:因为尽管有不可变的语义,但为了与其他容器保持一致,它们使它成为非`constexpr`.惭愧,如果你问我.几周前有人确实问过这件事.IIRC有可能在C++ 17中发生这种变化,但不要引用我的话.我们真正需要的是`static constexpr size_t size()const {return N; 成员函数或其他语法.
推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有