Return C++ 函数中的匿名 instance/value

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

我对 C++ 中的 return 函数类型有疑问。

为什么 return pair<int, int>(1, 1);return vector<int>(3, 3); 有效?我不应该事先创建一个本地实例变量并将其作为 return 值,就像 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;
}

难道return这样的风格只能应用于class具有特定构造函数的实例吗?下面的例子可以工作。 我正在寻找确认或参考资料。

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

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

测试的代码示例:

Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn) Target: x86_64-apple-darwin14.0.0 Thread model: posix

because return int 1 doesn't work.

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