[英]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.