代码之家  ›  专栏  ›  技术社区  ›  GZ92

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

  •  0
  • GZ92  · 技术社区  · 10 年前

    我对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 回复  |  直到 10 年前
        1
  •  3
  •   Tony Delroy    10 年前

    因为 return int 1 不起作用。

    但是 return int(1); 做或 return 3 - 2; 就这一点而言。创建一个临时的或使用一个文本并没有什么错——如果需要,将使用类复制或移动构造函数在调用方的上下文中设置变量,或者有时返回值优化(RVO)将启动,被调用的函数将能够直接在调用方堆栈中创建返回值。