在 C 20 之后std::remove_cvref替換嗎?std::decay
從這個鏈接,我無法理解這意味著什么:
C 20 將有一個新特性
std::remove_cvref,它不會std::decay對陣列產生不良影響
的不良影響是std::decay什么?
請舉例說明!
uj5u.com熱心網友回復:
std::remove_cvref不替換std::decay。它們用于兩種不同的事情。
陣列自然衰減為指向其第一個元素的指標。std::decay將陣列型別衰減為指標型別。因此,例如,std::decay<const char[N]>::type是const char*。
而從型別std::remove_cvref中洗掉const,volatile而不&更改有關型別的任何其他內容。因此,例如,std::remove_cvref<const char[N]>::typeischar[N]而不是char*.
uj5u.com熱心網友回復:
對于非陣列和非函式型別std::decay和std::remove_cvref是相同的。但是,對于函式和陣列型別的std::decay行為不同:
- 它不會洗掉 CV 或參考限定符
- 對于陣列,它衰減(第一維)到一個指標
- 對于函式型別,它將它們轉換為函式指標
閱讀更多關于cppreference
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/523354.html
標籤:C 元编程
上一篇:如何從/usr/local/include/以外的檔案夾安裝和呼叫c 庫
下一篇:C 在函式內部呼叫函式
