构造函数调用。我刚从维基页面上读到!这是真的+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; }