Tôi có mã sau sẽ không biên dịch, phàn nàn rằng toán tử + = không tồn tại. + = Điều hành đang ở đây tuyên bố bên ngoài của lớp A.Sự khác biệt giữa toán tử C++ quá tải bên trong và bên ngoài
template < typename _T >
class A {
public:
operator _T() const { return 42 ; }
};
template <typename _T >
A<_T> & operator += (A<_T> & l, _T r) { return l ; }
int main() {
A<int> e, f ;
e += f ;
return 0 ;
}
Tuy nhiên, nếu tôi thực hiện các nhà điều hành bên trong lớp A, mã biên dịch và các công trình:
template < typename _T >
class A {
public:
operator _T() const { return 42 ; }
A<_T> & operator += (_T r) { return *this ; }
};
int main() {
A<int> e, f ;
e += f ;
return 0 ;
}
sự khác biệt giữa hai mã này là gì? Họ không phải là tương đương?
Điều này được biên dịch bằng gcc 4.4.7-4.
Đây không phải là vấn đề, nhưng tên bắt đầu bằng dấu gạch dưới theo sau là một chữ cái viết hoa ('_T') được dành riêng để sử dụng bởi việc triển khai. Không sử dụng chúng trong mã của bạn. –