2
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()even for A a;。(我不是说这是好的设计!)。

4

1 回答 1

2

,没有任何保证。

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

整个第 23 条(容器库)中没有出现“布局”一词。我相信这足以假设没有提供任何保证。

于 2013-03-03T16:30:01.523 回答