从函数

时间:2015-04-22 12:33:04

标签: c++ class constructor copy

以下代码

class Foo
{
public:
    Foo() {a = 1;};
    Foo(const Foo&) :a(2) {};
    int a;
};

Foo foo()
{
    Foo a;
    return a; 
}

int main(int argc, char* argv[])
{
    Foo f = foo();
    std::cout << f.a << std::endl;

    return 0;
}

在Mac(使用g++)和VS2013上的工作方式不同。在Mac上它打印1,而在Windows上打印2。那么,当foo()按值返回类对象时,为什么程序不会调用复制构造函数?

1 个答案:

答案 0 :(得分:0)

此行为是由于在MAC中省略了额外的副本。也许,在Visual Studio中启用优化会带来类似的结果。