C++ 结构体可以直接赋值

来源:互联网 发布:淘宝app图标双11 编辑:程序博客网 时间:2024/05/21 10:47

一直记得C语言中,结构体是不可以直接赋值的,需要逐一成员赋值或者用memcpy函数。



但是在C++中可以(无需重载=运算符),需要区分以下3种情况:



#include<iostream>

#include<string>
using  namespace std;


 struct  A
 { 
char   a[10];
 };


  struct  B
 { 
char       *b;
 };


 struct  C
 { 
string       c;
 };




int  main()

A   a1 ; 
strcpy(a1.a ,"aaa");


        A   a2 ;
a2=a1; //深拷贝without defining the = operator    
printf("%s,  %s ,     %p ,   %p\n",  a1.a ,  a2.a,  a1.a ,  a2.a   ); 



    printf("\n-----------------------------------------\n");


B   b1;
b1.b = new char[10];
strcpy(b1.b, "bbb");


B  b2= b1;//浅拷贝
printf("%s,  %s ,     %p ,   %p\n",  b1.b ,  b2.b,  b1.b ,  b2.b   ); 





    printf("\n-----------------------------------------\n");


C   c1;
c1.c =string("ccc");


C   c2=c1;//深拷贝
printf("%s,  %s ,     %p ,   %p\n",  c1.c.c_str() ,  c2.c.c_str(),  c1.c.c_str() ,  c2.c.c_str()   ); 

  
}