1樓:Cooder
編譯器會做優化
C++ Core Guidelines
注意如果函式返回加了const,會起反作用(返回容器加const本身也很奇怪)
2樓:
一般編譯器會應用
RVO(Return Value Optimization)和NRVO(Named Return Value Optimization)規則
去掉2個臨時變數的構造和拷貝,直接在接收物件上進行構造, 所以不需要用到move語義。
3樓:Starve Jokes
準確說,推薦的做法是返回值時不要加std::move。
C++17及以上:拷貝省略 Copy elision - cppreference.com
C++11及以上:返回值優化(RVO, return value optimization)。這個規則超複雜,而且和編譯器支援有關。
加了std::move後會妨礙上面的優化。
不加std::move即使上面的優化不發生,(當返回的「變數」的生命週期在函式外失效時)也會進行move construction而非copy construction
-- 上面加粗部分舉個反向例子 --
struct
stringstream
string
str()
&&// C++20
//僅作示意,不代表std::stringstream內部結構string
buf;};
c 11中std unique ptr需要明確知道型別的析構函式,而shared ptr不需要?
土地測量員 詳細講一下std unique ptr的部分吧。std unique ptr需要明確知道型別的析構函式 unique ptr型別是 template class T,class Deleter std default delete class unique ptr private T p...
C 11為什麼引入nullptr?
徐辰 因為C 他爹早就看0這個magic number不爽了,當年沒顧上搞,一直拖到2011年了,再不瘋狂一把C 就沒人用了。 enpeng xu 問題的關鍵是c 不知道怎麼正確做void 到 T 的預設轉換,所以多此一舉的引入了nullptr。某些情況做下c 編譯器不知道怎麼把 void ptr正...
C 11 模板引數推導(Template Argument Deduction)是如何工作的?
electrlife 關於模版推導,借題主地盤,請教下如下情況如何理解?template class MyVector private T aa int main int argc,const char argv 這裡本意是請問 push back 的const 在推導過程是不是會重複const c...