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;
。 (我不是说这是好设计!)。
答案 0 :(得分:2)
否,没有任何保证。
C ++ 11标准明确提到类必须具有标准布局(例如mutex
类,atomic_flag
类等)。
“布局”一词未出现在整个第23条(容器库)中。我认为这足以假设没有给出任何保证。