请问在C++中 int a=1和int a ;a=1;区别在哪里?麻烦详细点 谢谢了

 我来答
装XfwX2
2014-06-21 · 超过49用户采纳过TA的回答
知道答主
回答量:90
采纳率:0%
帮助的人:95.2万
展开全部
先来个区别说明:赋值操作是在两个已经存在的对象间进行的,而初始化是要创建一个新的对象,并且其初值来源于另一个已存在的对象。编译器会区别这两种情况,赋值的时候调用重载的赋值运算符,初始化的时候调用拷贝构造函数。如果类中没有拷贝构造函数,则编译器会提供一个默认的。这个默认的拷贝构造函数只是简单地复制类中的每个成员。 下面看例子。 c++中初始化和赋值操作差别是很大的。 对于基本数据类型差别不大: 比如: int a = 12; // initialization, copy 0X000C to a a = 12; // assignment, copy 0X000C to a 但是对用户自定义的数据类型比如String 初始化和赋值就差别很大: class String ...{ public: String( const char *init ); // intentionally not explicit! ~String(); String( const String &that ); String &operator =( const String &that ); String &operator =( const char *str ); void swap( String &that ); friend const String // concatenate operator +( const String &, const String & ); friend bool operator <( const String &, const String & ); //... private: String( const char *, const char * ); // computational char *s_; }; 初始化的构造过程比较简单:先分配一个足够大的空间然后填充上数据: String::String( const char *init ) ...{ if( !init ) init = \"\"; s_ = new char[ strlen(init)+1 ]; strcpy( s_, init ); } 析构过程更简单: String::~String() ...{ delete [] s_; } 但是如果赋值操作就复杂多了: String &String::operator =( const char *str ) ...{ if( !str ) str = \"\"; char *tmp = strcpy( new char[ strlen(str)+1 ], str ); // 多了中间变量 delete [] s_; // 多了删除s_; s_ = tmp; // 多一个赋值操作!现在是指向字符的指针,如果是个大对象,效率的差别可想而知. return *this; }
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式