struct = struct 怎么工作
struct = struct 如何工作?
两个数组不能直接互相赋值:
int a[3], b[3] ;
a = b ;
编译器会报错。
可是,为什么把数组放在结构里就可以赋了?
struct int_array_s {
int a[3] ;
};
int_array_s a, b ;
// 初始化b
a = b ;
可以运行,结果也正确。
我是用VC++2005编译的
所以我想知道结构之间赋值是怎么工作的?我一直以为结构之间赋值就是简单的让成员一一对应。如果是这样的话那么第2段代码应该也是错误的呀?可是却可以运行,唯一要做的就是赋值之前必须对b进行初始化,否则会运行时错误。这点我也不太明白。
------解决方案--------------------
重载了operator =
系统提供了一个默认的拷贝赋值符
执行按成员赋值的行为
------解决方案--------------------
结构体有默认的重载=、拷贝构造
------解决方案--------------------
struct其实就是class,两个class可以直接赋值(用default copy construction)
你在struct中加上private: struct_name(struct& pstr){}应该就不能直接赋值了。
------解决方案--------------------
"我一直以为结构之间赋值就是简单的让成员一一对应 ",是按字节填充。
------解决方案--------------------
对了,按字节填充,所以你要特别注意指针类型的成员
两个数组不能直接互相赋值:
int a[3], b[3] ;
a = b ;
编译器会报错。
可是,为什么把数组放在结构里就可以赋了?
struct int_array_s {
int a[3] ;
};
int_array_s a, b ;
// 初始化b
a = b ;
可以运行,结果也正确。
我是用VC++2005编译的
所以我想知道结构之间赋值是怎么工作的?我一直以为结构之间赋值就是简单的让成员一一对应。如果是这样的话那么第2段代码应该也是错误的呀?可是却可以运行,唯一要做的就是赋值之前必须对b进行初始化,否则会运行时错误。这点我也不太明白。
------解决方案--------------------
重载了operator =
系统提供了一个默认的拷贝赋值符
执行按成员赋值的行为
------解决方案--------------------
结构体有默认的重载=、拷贝构造
------解决方案--------------------
struct其实就是class,两个class可以直接赋值(用default copy construction)
你在struct中加上private: struct_name(struct& pstr){}应该就不能直接赋值了。
------解决方案--------------------
"我一直以为结构之间赋值就是简单的让成员一一对应 ",是按字节填充。
------解决方案--------------------
对了,按字节填充,所以你要特别注意指针类型的成员