C 巢狀類使用注意事項

2021-09-24 04:03:54 字數 824 閱讀 5744

想在**裡通過巢狀類作為迭代器,訪問外層類的資料。

主要是為了避免在標頭檔案中包含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...