stu1的sizeof到底是多少?


#include<iostream>
using namespace std;
class Student
{
public:
    Student(string name);
    ~Student();
     static int _sum;
private:
    string _name;
};
//类外实现Student类有参构造函数
Student::Student(string name)
{
    this->_name = name;
    _sum++;
}
Student::~Student(){}
int Student::_sum = 0;//类外初始化静态成员变量_sum
int main()
{
    Student stu1("张三");
    Student stu2("李四");
    cout << "人数是:" << stu1._sum << endl;       //通过对象访问静态成员变量
    cout << "人数是:" << stu2._sum << endl;
    cout << "人数是:" << Student::_sum<< endl;    //通过类访问静态成员变量_sum
    cout << "stu1的大小是:" << sizeof(stu1) << endl;
    return 0;
}

书上的结果是28,我运行的是40;
课本是黑马的C++

static变量是不属于类的。
因此stu1的大小就是Student的大小,Student的大小就是string的大小,你可以输出sizeof(string),看看你的是不是40,
32位系统sizeof(string)的值是28
64位系统sizeof(string)的值是40

因为string内部是一个char*的指针还有int类型,不同位数的编译器字节数自然不同

#include<iostream>
using namespace std;
class Student
{
public:
    Student(string name);
    ~Student();
    static int _sum;
private:
    string _name;
};
//类外实现Student类有参构造函数
Student::Student(string name)
{
    this->_name = name;
    _sum++;
}
Student::~Student() {}
int Student::_sum = 0;//类外初始化静态成员变量_sum
int main()
{
    Student stu1("张三");
    Student stu2("李四");
    cout << "人数是:" << stu1._sum << endl;       //通过对象访问静态成员变量
    cout << "人数是:" << stu2._sum << endl;
    cout << "人数是:" << Student::_sum << endl;    //通过类访问静态成员变量_sum
    cout << "stu1的大小是:" << sizeof(stu1) << endl;
    cout << "string的大小是:" << sizeof(string) << endl;
    return 0;
}