String(const String& str) 和 String& operator = (const String& str) 哪個才是賦值建構式?
感覺
String str("hello"); 和 String str = "hello"; 都是賦值操作呀
uj5u.com熱心網友回復:
你看下書里面寫的。前者是拷貝建構式,后者是通過運算子多載“=”實作的賦值函式。uj5u.com熱心網友回復:
分清構造和賦值。狹義上說:
構造就是初始化,細說又有很多概念了,像什么值初始化、直接初始化、拷貝初始化、聚合初始化,串列初始化……參考:
https://en.cppreference.com/w/cpp/language/initialization;從另一個方面說又有顯示初始化,隱式初始化。
賦值是在初始化之后進行的改變整體值,就是叫拷貝賦值,是整體拷貝,就只有operator=了。
區別構造和賦值的關鍵就是,構造是在宣告的時候賦的初值。
所以只有拷貝構造、拷貝賦值,沒有賦值拷貝一說。
```
String str("hello"); //前面有型別宣告,后面有小括號也能看出來,肯定是構造,這個叫直接構造,也是顯示構造。
String str = "hello" ; //前面有型別宣告,那肯定是構造,用的等號=,是隱式構造,隱式呼叫直接建構式String(const char*)
```
uj5u.com熱心網友回復:
感謝回復! 好復雜
uj5u.com熱心網友回復:
剛剛學習的,知識:分享一下https://www.cnblogs.com/ymy124/p/3638132.html
uj5u.com熱心網友回復:
那位老師這句話總結一下就分清了“=”表示的是初始化還是賦值關鍵在于等號左邊物件是否已經存在(已經被構造)。如果不存在,則是初始化,應該呼叫建構式或復制建構式(具體視情況而定);如果存在,則是賦值,應該呼叫賦值運算子函式。
uj5u.com熱心網友回復:
贊!!!!!!! 醍醐灌頂轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/103065.html
標籤:C++ 語言
上一篇:VS2019 C++ 鏈接 MySQL 插入含有中文的資料失敗
下一篇:關于C語言萬能頭的問題
