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

时间:2015-02-02 02:35:52

标签: c++ anonymous-types return-type

我对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-apple-darwin14.0.0   线程模型:posix

1 个答案:

答案 0 :(得分:3)

  

因为return int 1无效。

return int(1);确实......或return 3 - 2;。创建临时或使用文字没有任何问题 - 如果需要,可以使用类复制或移动构造函数在调用者的上下文中设置变量,或者有时返回返回值优化(RVO)将启动并且被调用的函数将能够直接在调用者的堆栈中创建返回值。