c++类在定义时不可以初始化???为什么下面代码可以执行

时间:2021-10-29 22:00:35
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

class A
{
public:

int c = 3;
int a = 1;
int b = 2;
};
int main(int argc, char* argv[])
{
        cout<<sizeof(A)<<endl;
A a;

cout << a.a<< a.b<< a.c << endl;

return 0;
}


12
123
请按任意键继续. . .
类在定义时没有分配空间吗???
为什么sizeof(A)会是12个字节

类在定义时不可以初始化???
cout << a.a<< a.b<< a.c << endl;输出正常

4 个解决方案

#1


只能说现在的某些C++编译器越来越智能化,他会把你的类内初始化成员语句放入到默认的初始化函数中完成(你在反汇编代码中可以看到)。

类在定义时没有分配空间吗???
为什么sizeof(A)会是12个字节

这个更容易解释,sizeof并不是真正的函数,它只是个宏,它对任何类型变量的求值是在编译期而非执行期完成的。也就是说在执行期,size_t x = sizeof(A)已经变成了size_t x = 12这样常量赋值语句。

#2


C++11新特性 
Non-static data member initializers
sizeof得到的是对应的类型占用空间大小。

#3


最好要写代码初始化,编码器的自动初始化是不确定的

#4


sizeof 是运算符

#1


只能说现在的某些C++编译器越来越智能化,他会把你的类内初始化成员语句放入到默认的初始化函数中完成(你在反汇编代码中可以看到)。

类在定义时没有分配空间吗???
为什么sizeof(A)会是12个字节

这个更容易解释,sizeof并不是真正的函数,它只是个宏,它对任何类型变量的求值是在编译期而非执行期完成的。也就是说在执行期,size_t x = sizeof(A)已经变成了size_t x = 12这样常量赋值语句。

#2


C++11新特性 
Non-static data member initializers
sizeof得到的是对应的类型占用空间大小。

#3


最好要写代码初始化,编码器的自动初始化是不确定的

#4


sizeof 是运算符