64,687
社区成员
发帖
与我相关
我的任务
分享
struct和class的区别只有默认可见性,struct也可以继承和多态! 如果你不定义的话,c++的默认构造函数就是调用每个成员,和父类的构造函数 但是如果是基本类型,是没有默认构造函数的,或者说默认构造函数只是语法糖 每个成员,父类都是基本类型或者平凡类型的struct,如果构造函数是默认的,那它也是平凡类型 还有一些可见性之类的限制,具体可以百度 如果用{0},(),{}初始化平凡的类型的实例,编译器会将该内存都填充为0(但是不同编译器有点不同) 否则的话平凡类型的内容就是默认栈祯,默认栈祯的填充值在debug和release,自定义的编译选项中是不同的 可以使用std::is_pod判断类型是否平凡类型
经过多次试验,结构体局部变量也被初始化为0 结构体定义的变量是多种基本变量的一个集合。定义的变量和基本类型定义的变量一样。对于定义的局部结构体变量,若不初始化,结构体成员都为随机值,但是定义的全局或静态结构体变量,编译器会将其成员初始化为0.
结构体定义的变量是多种基本变量的一个集合。定义的变量和基本类型定义的变量一样。对于定义的局部结构体变量,若不初始化,结构体成员都为随机值,但是定义的全局或静态结构体变量,编译器会将其成员初始化为0.
不同编译器,不同输出版本(Debug/Release),会有不同值。
首先要分清楚你是在C++ 编译器 还是C编译器? 我猜你应该是问在C++中的编译器吧 如果是在C++的编译器中 struct与class是小异大同。struct默认访问权限是public,class是private;class有继承,多态机制,而struct没有。 关于你问的定义的 非struct成员变量如果不初始化为随机值 struct的成员变量也为初始化为0 C++分为四部分 (1)C 部分 (2)面向对象部分 (3)C++模板 (4)STL 其中关于C部分中的 如int char等基本类型的 初始化值是未定义的 而关于C++中实现的 如string 类型 确是 初始化值是0 因为它的默认构造函数会帮助它初始化为0 class A { public: A(){}; private; int a; string t; } 所以C++提供了一个构造函数的成员初始化列表 来对如string 类型进行初始化,防止进行多余的拷贝构造。 所以你经常看到成员初始化中把C的基本类型 写在成员初始化列表 目的是代码风格一致性。 如果关于是C部分的基本类型 初始化的值是随机的。 通常是0.但是你不能期待上帝 每次都会是0.
首先要分清楚你是在C++ 编译器 还是C编译器? 我猜你应该是问在C++中的编译器吧 如果是在C++的编译器中 struct与class是小异大同。struct默认访问权限是public,class是private;class有继承,多态机制,而struct没有。 关于你问的定义的 非struct成员变量如果不初始化为随机值 struct的成员变量也为初始化为0 C++分为四部分 (1)C 部分 (2)面向对象部分 (3)C++模板 (4)STL 其中关于C部分中的 如int char等基本类型的 初始化值是未定义的 而关于C++中实现的 如string 类型 确是 初始化值是0 因为它的默认构造函数会帮助它初始化为0 class A { public: A(){}; private; int a; string t; } 所以C++提供了一个构造函数的成员初始化列表 来对如string 类型进行初始化,防止进行多余的拷贝构造。 所以你经常看到成员初始化中把C的基本类型 写在成员初始化列表 目的是代码风格一致性。 如果关于是C部分的基本类型 初始化的值是随机的。 通常是0.但是你不能期待上帝 每次都会是0.