Effective C++ 条款05
生活随笔
收集整理的這篇文章主要介紹了
Effective C++ 条款05
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
了解C++默默編寫并調用哪些函數。Know what functions C++ silently writes and calls
?
有如下函數會被編譯器自動生成,如果在這些函數需要被調用時,且這個對象的作者自己沒有創建對應函數。
注意,只有當這些函數被需要調用時,編譯器才會創建這些函數。
?
對于copy構造函數和賦值操作符,編譯器創建的版本只是單純的將來源對象的每一個Non-static 成員變量拷貝到目標對象。
另外,也會存在編譯器拒絕為class 生成賦值操作符或者是拷貝構造函數的情況:
第一:如果父類的拷貝構造函數為private,那么子類不會自動生成拷貝構造函數。因為子類的拷貝構造函數需要調用父類的拷貝構造函數。
第二:只有當生成的代碼合法,且有適當機會證明它有意義,對應函數才會自動生成。(以下面為例)
template <T> class NamedObject { public:NamedObject(std::string &name,const T& value);............ private: Tstd::string &nameValue;const T& objectValue; }
這時,有如下情況:
std::string newDog("Persephone"); std::string oldDog("Satch"); NamedObject<int> p(newDog,2); NamedObject<int> s(oldDog,3); p=s;?
當代碼p=s這一句時,編譯器會為NamedObject 生成賦值操作符函數,但是,C++ 不允許引用類型被初始化以后再指向其他對象。所以這里,編譯器的動作是拒絕生成賦值操作符函數。因此編譯失敗。
轉載于:https://www.cnblogs.com/lucy-lizhi/p/7443062.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Effective C++ 条款05的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDU 1426 Sudoku Kill
- 下一篇: 爬虫相关