构造函数调用。我刚从维基页面上读到!这是真的+1. @MichaelSmith:我认为你应该选择这个答案,它给了你关于如何设计操作符的正确建议。如果你打算让你的代码constexpr,写出operator+,然后写出operator+=。在C++11中,返
构造函数调用。我刚从维基页面上读到!这是真的+1. @MichaelSmith:我认为你应该选择这个答案,它给了你关于如何设计操作符的正确建议。如果你打算让你的代码constexpr,写出operator+,然后写出operator+=。在C++11中,返,c++,operator-overloading,C++,Operator Overloading,构造函数调用。我刚从维基页面上读到!这是真的+1. @MichaelSmith:我认为你应该选择这个答案,它给了你关于如何设计操作符的正确建议。如果你打算让你的代码constexpr,写出operator+,然后写出operator+=。在C++11中,返回{left.I+right.I}是方法#3,它是。。。也会做同样的事情(在琐碎的优化之后)。 #include<iostream> using namespace std; class X { int i; pu
构造函数调用。我刚从维基页面上读到!这是真的+1. @MichaelSmith:我认为你应该选择这个答案,它给了你关于如何设计操作符的正确建议。如果你打算让你的代码
constexpr
,写出operator+
,然后写出operator+=
。在C++11中,返回{left.I+right.I}
是方法#3,它是。。。也会做同样的事情(在琐碎的优化之后)。
#include<iostream>
using namespace std;
class X
{
int i;
public:
X(int a=0) : i(a) {}
friend X operator+ (const X& left,const X&right);
};
X operator+ (const X& left,const X&right) // Method 1
{
return X(left.i + right.i);
}
X operator+ (const X& left,const X&right) // Method 2
{
X temp(left.i + right.i);
return temp;
}
int main()
{
X a(2),b(3),c;
c=a+b;
c.print();
return 0;
}
const X operator + (const X& left, const X&right)
// ^^^^^
// Don't use this!
X& operator+=(const X&right) { i += right.i; return *this; }
X operator+(X left, const X& right) { return left += right; }