У меня есть класс с перегруженным оператором преобразования, как это:Последствия перегрузки оператора преобразования
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; '. – molbdnilo