gpt4 book ai didi

c++ - POD 对包含标准库容器的结构的影响

转载 作者:太空狗 更新时间:2023-10-29 21:19:29 26 4
gpt4 key购买 nike

我遇到了 this最近问。我的目标是了解 C++ 编译器如何查看包含标准库容器(如 std::vector)的结构定义。

Ben Voigt's对链接问题的回答引用了 C++0x 标准中的以下内容:

....

A trivial class is a class that has a trivial default constructor (12.1) and is trivially copyable.

[ Note: In particular, a trivially copyable or trivial class does not have virtual functions or virtual base classes. — end note ]

A standard-layout class is a class that:

  • has no non-static data members of type non-standard-layout class (or array of such types) or reference,

....

我几乎可以肯定粗体文本暗示以下是未定义的行为

struct A 
{
std::vector< SomeType > myVec;
int myC;
A( int c ) : myC : (c) {}
};

int main( void )
{
A one( 1 );
A two( 2 );

SomeType k, z;
one.myVec.push_back( k );
two.myVec.push_back( z );

memcpy( &two, &one, sizeof( A ) ); // bad juju
}

对于来自标准库的 any 类型也是如此,包括更简单的类型,例如 std::string。这是由于图书馆设计的性质,因为它大量使用继承和模板编程。

因此,虽然 struct A 类似于 POD 类型,但它包含标准库类型的事实自动使它从该类别中无效,就编译器有关。

我的假设是否正确?

最佳答案

没有。你的基本假设是有缺陷的。 “标准布局”与模板无关。例如。 std::pair<T1, T2>具有标准布局当且仅当两者T1T2做。同样适用于 std::array<T,N>

但是,容器 都没有标准布局。他们的分配器的全部意义在于拥有先进的内存管理。

关于c++ - POD 对包含标准库容器的结构的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27165436/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com