gpt4 book ai didi

c++ - 会不会是 sizeof(T*) != sizeof(const T*)?

转载 作者:IT老高 更新时间:2023-10-28 12:11:57 24 4
gpt4 key购买 nike

我正在和我的老板争论这件事。他们说“是的,他们可以与众不同。”

sizeof(T*) != sizeof(const T*) 是否可能用于类型 T

最佳答案

不,它们不可能不同。对于足够不同的 T1T2sizeof(T1 *) 可以不同于 sizeof(T2 *),但如果 T2 只是 const T1,那么:

3.9.2 Compound types [basic.compound]

3 [...] Pointers to cv-qualified and cv-unqualified versions (3.9.3) of layout-compatible types shall have the same value representation and alignment requirements (3.11). [...]

并且任何类型的 T 都与自身布局兼容:

3.9 Types [basic.types]

11 If two types T1 and T2 are the same type, then T1 and T2 are layout-compatible types. [...]


值表示与对象表示有关,如果没有相同的对象表示,则不能具有相同的值表示。后者意味着需要相同的位数。

3.9 Types [basic.types]

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.44

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

要求的重点,它不只是说这两种类型具有相同的对象表示的原因,是 T *const T * 不是仅具有相同的位数,而且构成该值的是 T *const T * 中的相同位。这不仅意味着保证 sizeof(T *) == sizeof(const T *),而且意味着你甚至可以使用 memcpy 来复制 T * 指针值指向 const T * 指针值,反之亦然,并获得有意义的结果,与 const_cast 获得的结果完全相同。

对齐要求也提供了一些额外的保证,但是它们很难正确解释并且与这个问题没有直接关系,并且标准中存在破坏某些预期保证的问题,所以我认为最好忽略它在这里。

关于c++ - 会不会是 sizeof(T*) != sizeof(const T*)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33869832/

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