在 C++ 中的函数中返回匿名实例/值

Return an anonymous instance/value in functions in C++

本文关键字:实例 返回 C++ 函数      更新时间:2023-10-16

我对C++函数的返回类型有疑问。

为什么return pair<int, int>(1, 1);return vector<int>(3, 3);有效?我不应该事先创建一个本地实例 var 并将其作为返回值,就像返回 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-苹果达尔文14.0.0 螺纹型号:磅

因为return int 1不起作用。

return int(1);确实...或return 3 - 2;就此而言。 创建临时或使用文字没有错 - 如有必要,将使用类复制或移动构造函数在调用方的上下文中设置变量,或者有时返回返回值优化 (RVO) 将启动,被调用函数将能够直接在调用方的堆栈中创建返回值。