nrvo

    0熱度

    1回答

    我讀的書內C++對象模型,我得到了下面的事情: 據我所知,NRVO不會調用拷貝構造函數函數返回的類。所以我不明白爲什麼「由於沒有複製構造函數,程序的第一個版本不適用NRV優化...」。

    7熱度

    2回答

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

    7熱度

    3回答

    一個函數需要返回兩個值給調用者。什麼是最好的實施方式? 選項1: pair<U,V> myfunc() { ... return make_pair(getU(),getV()); } pair<U,V> mypair = myfunc(); 選項1.1: // Same defn U u; V v; tie(u,v) = myfunc(); 選項2: void myfun

    2熱度

    1回答

    自1992年以來,我一直在使用C++(並閱讀大量關於該語言的內容),所以我對這門語言有相當的瞭解,但遠不止這些。我的問題是關於C++ 11命名的返回值優化 - 有什麼保證它會被執行?我傾向於發送非常量參數(C++ 97樣式)或使用shared_ptr(C++ 11樣式),甚至使用ptr-to-ptr(C樣式)。一個原因是,使用非const引用args或shared_ptr,我保證沒有額外的對象副本

    4熱度

    2回答

    當我在VS2010中運行此代碼時,不應用NRVO。 #include <stdio.h> class A { public: A() { printf("I am in constructor\n"); } A(const A& a) { printf("I am in copy constructor\n"); } ~A() { printf("I

    0熱度

    1回答

    class Date { private: int day,month,year; public: Date (int d,int m,int y) { day=d; month=m; year=y; } Date (Date &d) { day=d.day; month=d.month; year=d.year; } int monthDays(int mont

    1熱度

    3回答

    我有一個函數,我希望編譯器始終使用NRVO ......即使在調試模式下。這是否有一個附註? 這裏是我的類,它工作在「釋放」模式極大: template <int _cbStack> class CBuffer { public: CBuffer(int cb) : m_p(0) { m_p = (cb > _cbStack) ? (char*)malloc(cb) : m

    3熱度

    1回答

    我試圖編寫一個(C++ 98)程序,其中發生以下模式:我有一個非常簡單的通用元組類,並且需要用值填充它使用工廠建造。小例子,代碼如下: #include <iostream> class diagnostics { private: int payload; public: diagnostics(int a) : payload(a) {

    6熱度

    1回答

    比方說,我有功能 #include <string> std::string const foo() { std::string s = "bar"; return s; } int main() { std::string t = foo(); } 可以執行(命名)返回值優化t,即使類型s和t是從foo返回類型都不同,由於const編譯器差異?

    1熱度

    2回答

    我已閱讀了一些關於移動功能的帖子(例如http://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.html),並且我想觀察移動操作員的行動。所以,我想下面的代碼: #include <vector> #include <cassert> #include <functional> #inclu