繁体   English   中英

C ++使用返回的对象初始化一个对象

[英]c++ using returned object to initialize an object

我为C ++的返回值机制感到困惑,我编写了以下代码来证明我的选择,并且代码的结果(在代码之后是否带有“?”,并且输出为粗体)使我感到困惑,有人可以解释为什么它输出这样,还是因为我的编译器供应商(MS Visual C ++)为我优化了?

#include <iostream>

class WInt
{
public:
    WInt( int a ) : a(a){ std::cout << a << " " << "A constructor" << std::endl; }
    WInt( const WInt& a )
    { 
        std::cout << "copy constructor run" << std::endl;
        this->a = a.a;
    }
    ~WInt(){ std::cout << "WInt destructor" << std::endl; }

    WInt& operator=( const WInt& v )
    {
        std::cout << "assignment operator" << std::endl;
        this->a = v.a;
        return *this;
    }

    friend const WInt operator+( const WInt& v1, const WInt& v2 )
    {
        return WInt( v1.a + v2.a );
    }

private:
    int a;
};

int main( int argc, char* argv[] )
{
    std::cout << "-----------" << std::endl;
    WInt a(1); // run constructor
    WInt b(2); // run constructor

    std::cout << "-----------" << std::endl;
    WInt c = a + b; // ???????????????????

    std::cout << "-----------" << std::endl;
    WInt d( a + b ); // ???????????????????

    std::cout << "-----------" << std::endl;
    c = a + b + c; // run the +, +, =, ~, ~

    std::cout << "-----------" << std::endl;
    WInt e = c; // run copy constructor

    std::cout << "-----------" << std::endl;

    return 0;
}

输出为:

-----------

1 A constructor

2 A constructor

-----------

**3 A constructor**

-----------

**3 A constructor**

-----------

3 A constructor

6 A constructor

assignment operator

WInt destructor

WInt destructor

-----------

copy constructor run

-----------

WInt destructor

WInt destructor

WInt destructor

WInt destructor

WInt destructor

这是返回值优化 您的编译器正在优化不必要的副本(尽其所能)。

编辑:检查问题的进一步解释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM