C++ 运算符重载是一种强大的功能,它允许你为自定义类型(如类或结构体)定义运算符的行为。为了使运算符重载更加便捷,你可以遵循以下建议:
class MyClass {
public:
int value;
MyClass(int v) : value(v) {}
MyClass operator+(const MyClass& other) const {
return MyClass(value + other.value);
}
};
class MyClass {
public:
int value;
MyClass(int v) : value(v) {}
};
MyClass operator+(const MyClass& lhs, const MyClass& rhs) {
return MyClass(lhs.value + rhs.value);
}
+
和 -
。为了实现这一点,你可以重载运算符运算符,即 operatoroperator()
。例如:class MyClass {
public:
int value;
MyClass(int v) : value(v) {}
MyClass operator+(const MyClass& other) const {
return MyClass(value + other.value);
}
MyClass operator-(const MyClass& other) const {
return MyClass(value - other.value);
}
};
MyClass operator+(const MyClass& lhs, const MyClass& rhs) {
return lhs + rhs;
}
auto
关键字:在 C++11 及更高版本中,你可以使用 auto
关键字来简化复杂的类型推导。例如:auto result = my_object1 + my_object2;
constexpr
关键字:如果可能的话,将运算符重载函数声明为 constexpr
,这样它们可以在编译时计算。这可以提高性能,并使代码更安全。例如:class MyClass {
public:
int value;
constexpr MyClass(int v) : value(v) {}
constexpr MyClass operator+(const MyClass& other) const {
return MyClass(value + other.value);
}
};
decltype
关键字:decltype
可以帮助你推导出表达式的类型,从而使运算符重载函数更简洁。例如:class MyClass {
public:
int value;
MyClass(int v) : value(v) {}
MyClass operator+(const MyClass& other) const {
return MyClass(value + other.value);
}
};
decltype(auto) operator+(const MyClass& lhs, const MyClass& rhs) {
return lhs + rhs;
}
遵循这些建议,可以使你的 C++ 运算符重载更加便捷、高效和易于维护。