【发布时间】:2015-04-14 11:27:04
【问题描述】:
我有一个带有这样的重载转换运算符的类:
template <class T> class Pointer {
T* object;
public:
Pointer (T* object): object(object) {}
operator T* () { return object; }
};
我注意到,一些我通常必须手动重载的运算符现在突然像 Pointer 是 T* 一样工作,但有些运算符却没有:
MyClass my_object;
Pointer<MyClass> pointer (&my_object);
if (pointer) { /* ... */ } // works
if (pointer == &my_object) { /* ... */ } // works
(*pointer).some_method (); // works
pointer->some_method (); // doesn't work
pointer = pointer + 1; // works
pointer++; // doesn't work
假设根据标准这是正确的行为,我怎么知道哪些有效,哪些无效(无需反复试验),更重要的是,为什么会这样?
【问题讨论】:
-
顺便说一句,使构造函数
explicit会导致pointer = pointer + 1;失败。
标签: c++ operator-overloading implicit-conversion