g*********s 发帖数: 1782 | 1 The following seems legal in C++. But what is sizeof(X), 0?
class X {
public:
static X _x;
};
X X::_x; |
g*********s 发帖数: 1782 | 2 sizeof(X) = 1. so what is put in that byte?
【在 g*********s 的大作中提到】 : The following seems legal in C++. But what is sizeof(X), 0? : class X { : public: : static X _x; : }; : X X::_x;
|
e****d 发帖数: 895 | 3 The most derived class cannot be empty.
【在 g*********s 的大作中提到】 : sizeof(X) = 1. so what is put in that byte?
|
p*****d 发帖数: 80 | 4 这和空class的结果是一样的,不同的编译器可能得到不同的结果,可能是1,也有可能
是其他值,但不会是0。因为_x是static的,所以并不存贮在instance中。
不是0的原因是因为new X()需要返回一个指针,如果开辟的内存长度为0的话,这个指
针指向的地址是无法定义的,所以至少需要一个“废"字节。
同理,如果X中再加上一个int型member的话,返回的就是int的长度,static _x就完全
被忽略了。
【在 g*********s 的大作中提到】 : The following seems legal in C++. But what is sizeof(X), 0? : class X { : public: : static X _x; : }; : X X::_x;
|
g*********s 发帖数: 1782 | 5 赞条理清晰。
【在 p*****d 的大作中提到】 : 这和空class的结果是一样的,不同的编译器可能得到不同的结果,可能是1,也有可能 : 是其他值,但不会是0。因为_x是static的,所以并不存贮在instance中。 : 不是0的原因是因为new X()需要返回一个指针,如果开辟的内存长度为0的话,这个指 : 针指向的地址是无法定义的,所以至少需要一个“废"字节。 : 同理,如果X中再加上一个int型member的话,返回的就是int的长度,static _x就完全 : 被忽略了。
|