簡體   English   中英

在C ++中的函數中返回匿名實例/值

[英]Return an anonymous instance/value in functions in C++

我對C ++中函數的返回類型有疑問。

為什么return pair<int, int>(1, 1); return vector<int>(3, 3); 工作? 我不應該事先創建一個本地實例var並將其作為返回值,就像return a一樣,因為return int 1; 不起作用。

// ...

int fun1() {
    // return int 1;
    int a = 1;
    return a;
}

pair<int, int> fun2() {
    return pair<int, int>(1, 1);
}

vector<int> fun3() {
    return vector<int>(3, 3);
}

int main(){
    cout << fun1() << endl;
    cout << fun2().first << endl;
    cout << fun3()[1] << endl;

    return 0;
}

這樣的返回樣式只能應用於具有特定構造函數的類實例嗎? 下面的示例可以工作。 我在尋找確認書或參考資料。

class A {
public:
    int a;
    A(int a_) : a(a_) {};
};

A fun4() {
    return A(1);
}

在以下位置測試了代碼示例:

Apple LLVM版本6.0(clang-600.0.56)(基於LLVM 3.5svn)目標:x86_64-apple-darwin14.0.0線程模型:posix

因為return int 1不起作用。

但是return int(1); 是否...或return 3 - 2; 對於這個問題。 創建臨時文件或使用文字沒有問題-如有必要,可以使用類復制或移動構造函數在調用者的上下文中設置變量,或者有時會返回Return Value Optimization(RVO),被調用函數將能夠直接在調用者的堆棧中創建返回值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM