rvo

    7熱度

    2回答

    比方說,我們有這種情況 std::string v_1() { return "name"; } std::string test = v_1(); 是RVO應用在這裏?我認爲答案是否定的,因爲應用RVO的規則是:「如果一個函數按值返回一個類的類型,並且return語句的表達式是一個非自動存儲持續時間的非易失性對象的名稱,函數參數或catch子句參數與具有相同類型(忽略頂級cv

    0熱度

    1回答

    我一直在密切關注的建議從來沒有寫return語句中std::move,for example。除了一些邊緣情況,for example。 我相信,以下是其中std::move可能是值得其他簡單的例子 - 我錯過了什麼?但是我不確定爲什麼,並且在未來的C++中會發生什麼變化? #include <iostream> struct A { }; struct C { }; stru

    5熱度

    1回答

    讓我們假設我有struct Foo與移動constructor和operator=(Foo&&),我用它作爲數據成員: Foo f() { Foo foo; //code return foo; } struct Boo { Foo foo; Boo() { foo = f();//1 foo = std::move(f());//2

    4熱度

    1回答

    要了解編譯器如何選擇一類的構造函數的方式,我寫的代碼如下: #include <iostream> struct Widget { Widget(Widget&& w){std::cout << "Move ctor" << std::endl;} Widget(void){std::cout << "Default ctor" << std::endl;} W

    -1熱度

    1回答

    我的應用程序有一個很奇怪的問題。我正在使用STM開發板NUCLEO-F411RE和MBED Online IDE。我的函數myObj()返回一個對象;返回的對象的值被打印到LCD上。 我似乎發現了一些問題,可能在編譯器/鏈接器中使用了Return Value Optimization。 我無法用錯誤的應用程序代碼解釋問題。 在myObj()中添加第二個return語句時,開始出現奇怪的行爲。 隨着

    1熱度

    1回答

    我是使用C++ 11的項目成員。我不知道什麼時候應該使用返回值的錯誤代碼。我發現RVO在C++中工作得很好,即使字符串和結構數據直接返回。但是如果我使用返回碼,我無法獲得RVO的好處,並且代碼有點多餘。 所以每次我聲明函數時,我都無法決定我應該使用哪個返回值。我應該如何保持我的代碼的一致性?任何建議都會幫助我。 // return string MyError getString(string&

    7熱度

    1回答

    #include <vector> using namespace std; struct A { A(const vector<int>&) {} A(vector<int>&&) {} }; A f() { vector<int> coll; return A{ coll }; // Which constructor of A wil

    1熱度

    2回答

    「返回值優化」的概念是否適用於C++編譯器中的lambda表達式?我知道它取決於編譯器和優化參數,但理論上可行嗎? 順便說一句,有沒有人知道VS.NET 2013或更高版本中的這個問題?

    -3熱度

    1回答

    由於來自社區的廣泛響應,我希望能夠從堆棧溢出用戶中推斷特定於實現的響應。 哪些是最佳做法(提供最大優化)? // version 1 MyObject Widget::GetSomething() { return MyObject(); } // version 2 MyObject Widget::GetSomething() { return std::move

    1熱度

    1回答

    我在下面有這個示例代碼。我對RVO(返回值優化)知之甚少,在優化期間如何跳過複製構造函數和賦值運算符,並將值直接放回到左側的內存中。因此,如果共享指針執行RVO,共享指針如何知道何時增加其計數器?由於某種原因,我認爲共享指針類會根據所創建的副本或賦值數量知道何時增加計數器。 #include <iostream> #include <memory> using namespace std;