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

Dea*_*ean 2 c++ arrays sizeof c++11 c++14

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

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

  std::array<float, 4> cfunction() {
    std::array<float, sizeof(carr) / sizeof(float)> out;
    return out;
  }

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

int main()
{
    MyClass obj;
    obj.function();
}
Run Code Online (Sandbox Code Playgroud)

Lig*_*ica 5

没有.

我们得到的唯一保证std::array<T, N>是:

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

  • @Dean:因为尽管有不可变的语义,但为了与其他容器保持一致,它们使它成为非`constexpr`.惭愧,如果你问我.几周前有人确实问过这件事.IIRC有可能在C++ 17中发生这种变化,但不要引用我的话.我们真正需要的是`static constexpr size_t size()const {return N; 成员函数或其他语法. (3认同)