C++结构体如何设置默认值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++结构体如何设置默认值?相关的知识,希望对你有一定的参考价值。

几天老师讲了类类型可以通过构造函数对其成员进行初始化。
在结构体中可以吗?
例如
struct node
int flag;;
我想每声明一个node变量,其中的flag值默认为0,该怎么办?
那么在C语言中可不可以对结构体赋默认值呢?

几天老师讲了类类型可以通过构造函数对其成员进行初始化。
在结构体中可以吗?
可以的。

我想每声明一个node变量,其中的flag值默认为0,该怎么办?
像下面这样:
#include <iostream.h>

struct node

int flag;
node(); // 默认构造函数
;
node::node()

flag = 0; // 像这样


int main(int argc, char *argv[])

// 测试
node n;
cout << n.flag << endl;
return 0;
参考技术A 1)默认成员访问权限为struct为public,class为private;
(2)默认继承权限,继承自struct的默认为public继承,继承自class的默认为private继承。
除此之外,class是怎样的,struct就是怎样。

至于只有基本类型成员的POD类型来说,它确实有一些特别的地方,比如可以用大括号的语法来初始化。但这一点class也是一样的,并没有什么实质区别。比如你的:
struct SysMaskPara

int UpPortFirst;
int UpPortSecond;
int UpPortThird;
int UpPortFourth;
;
如果改写成:
class SysMaskPara

public:
int UpPortFirst;
int UpPortSecond;
int UpPortThird;
int UpPortFourth;
;
在C++语言中,效果上是一样的。只不过那样一来,C语言用不了了。
参考技术B c++中的结构体基本上可以和类等同,只是结构体的默认权限是public,而类的则是private,完全可以给结构体写构造函数,但是在c语言中就不可以。 参考技术C 默认值设置为0
sturct node aaa;
直接用memset(&aaa,0,sizeof(node));
参考技术D 可以 结构体除了默认属性私有以外 跟类是一样的

Visual Studio2008 C++结构体成员需要内存对齐吗?

比如结构体struct Test char a; short b; double c ;成员变量长度依次是1字节、2字节、8字节。在Visual Studio2008 C++中将结构成员对齐设置为1时,结构体长度就是11字节。结构体成员对齐设置为默认值8时,结构体长度是16字节。定义一个此结构体类型变量,读取各个成员,从汇编上可以看到,两种对齐方式下,都是一次性读完的。结构体成员对齐默认值8,除了让结构体变大了,访问效率提高了吗?往上说内存对齐也有原因是为了代码移植。代码移植是把代码转移到其他操作系统或者编译器上,结构体成员位置放置是人家的事,与Visual Studio2008 C++有何关系?
求有大神给个合理解释。。。

参考技术A 效率有提高。除非你使用sizeof之类的,否则大小影响不大。追问

sizeof这个一般不咋需要吧,定义结构体为了表示一类物体的零部件的。定义结构体对象/new结构体对象、读写数据、delete结构体对象,结构体一般就这些用处。

以上是关于C++结构体如何设置默认值?的主要内容,如果未能解决你的问题,请参考以下文章

如何给C语言结构体中的成员赋默认值

C++ 结构体如何初始化

.NET DateTime类型变量作为参数时设置默认值

C++ 如何将一个静态结构体数组初始化?

定义结构体时的初始化默认值

如何将空值设置为结构的默认值