想在**裡通過巢狀類作為迭代器,訪問外層類的資料。
主要是為了避免在標頭檔案中包含stl標頭檔案,編譯時間傷不起
然後出現了神奇的bug,簡化後**如下:
classab
(const b&b)
private
:int idx=0;
};b getb()
};void
test2()
百思不得其解,google很久,最後得知c++11起新增了move
操作避免複製臨時物件和右值優化,c++17更是新增了copy elision
右值拷貝優化,臨時物件被賦值給同型別物件時。
還是以**舉例
classab
(const b&b)b(
const b&&b)
// c++11新增的移動建構函式,配對是的移動賦值函式
private
:int idx=0;
};b getb()
b getb2()
};void
test2()
總結:
如果巢狀類物件可以有副本且包含指標變數,那麼一定要使用共享型指標,如std::shared_ptr
,不要用std::unique_str
等
本貼沒有體現,直接說結論,巢狀類需要在dll外使用時,也要像正常類一樣dllexport
c++標準說明
參考2參考3
參考4
Calendar類使用注意事項
1 月份從0開始。2 set方法修改修改時間後,若比合理日期大時cal自動進製,例如6 31會變成7 1 add方法超出正常範圍時上級字段進製,下級字段修改為變化最小的值。roll方法超出正常範圍時上級字段不變,下級欄位同add方法。3 set方法延遲修改,修改只是暫時修改日曆字段,所代表的時間不變...
C 模板使用注意事項
c 模板使用有很多的規則,如果稍有問題便會出問題。由於c 宣告模板和實現模板規則不一樣,很容易出錯,現將遇到的注意事項列出來,當便大家也方便自己以後找錯。1 類的內部區域性模板成員函式不能是虛擬的,virtual這個識別符號。2 宣告了模板類,在實現其介面的時候注意在類網域名稱加上 類名 定義的泛型...
C 使用memset注意事項
include void memset void dest,int ch,std size t count 它會 轉換值 ch 為 unsigned char 並複製它到 dest 所指向物件的首 count 個位元組。因此memset方法會破壞物件內部保持狀態的私有變數,從而造成未知後果。下例對s...