gpt4 book ai didi

c++ - 非平凡可复制类型的值表示

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:07 29 4
gpt4 key购买 nike

我对标准中的以下段落很感兴趣(ISO/IEC 14882:2011(E) 的§3.9/4):

The object representation of an object of type T is the sequence of N unsigned char objects taken up by the object of type T, where N equals sizeof(T). The value representation of an object is the set of bits that hold the value of type T. For trivially copyable types, the value representation is a set of bits in the object representation that determines a value, which is one discrete element of an implementation-defined set of values.42

我理解对象表示值表示是不同的,允许一些对象表示不参与对象的值(例如,填充).不过,我不太明白关于普通可复制类型的意义。非平凡可复制的类型没有值吗?非平凡可复制类型的部分值表示是否可以存在于其对象表示之外?

注释 42 解释:

The intent is that the memory model of C++ is compatible with that of ISO/IEC 9899 Programming Language C.

我仍然不明白为什么前面的语句只针对平凡可复制的类型。这有什么意义?

最佳答案

标准示例是管理资源的类:

struct Foo
{
Bar * p;

Foo() : p(new Bar) { }
~Foo() { delete p; }

// copy, assign
};

Foo 类型的对象有一个值,但该值不能通过复制对象表示(在本例中只是 p 的值)来复制。复制 Foo 类型的对象需要复制类的语义,即“对象拥有指针”。因此,一个合适的拷贝需要一个合适的、用户定义的复制构造函数:

Foo::Foo(Foo const & rhs) : p(new Bar(*rhs.p)) { }

现在 Foo 类型的对象的对象表示与此类对象的拷贝的对象表示不同,尽管它们具有相同的值。

相比之下,只要对象表示一致,int 的值就与另一个int 的值相同。 (由于填充,这是一个充分条件,但不是必要条件。)

关于c++ - 非平凡可复制类型的值表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12773640/

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