【发布时间】:2017-05-05 23:08:50
【问题描述】:
我有以下代码无法编译,抱怨 += 运算符不存在。 += 运算符在这里声明在 A 类之外。
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 ;
}
但是,如果我在 A 类中实现运算符,则代码可以编译并工作:
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 ;
}
这两个代码有什么区别?他们不应该是等价的吗?
这是使用 gcc 4.4.7-4 编译的。
【问题讨论】:
-
这不是问题,但是以下划线后跟大写字母 (
_T) 的名称保留供实现使用。不要在你的代码中使用它们。
标签: c++ class templates operator-overloading