STL容器是否有任何标准布局保证?

时间:2013-03-03 16:02:24

标签: c++ stl c++11 standard-layout

struct A {
   // ... some methods ...
   std::vector<int> foo;
   // ... more data members ...
};

使用g ++ 4.7和libstdc ++,我得到std::is_standard_layout<A>::value == true 但是其他编译器或标准库会发生什么? 是否有任何保证(至少某些?)STL容器不会破坏标准布局?

背景:

struct B : A { // still standard-layout
   // ... more methods (but no new variables!)
   void bar();
};

这样即使static_cast<B &>(a).bar()也允许使用A a;。 (我不是说这是好设计!)。

1 个答案:

答案 0 :(得分:2)

,没有任何保证。

C ++ 11标准明确提到类必须具有标准布局(例如mutex类,atomic_flag类等)。

“布局”一词未出现在整个第23条(容器库)中。我认为这足以假设没有给出任何保证。