C++:重载运算符.奇怪的类型转换运算符

C++: Overloading operators. Curious type-transform operator

本文关键字:运算符 类型转换 重载 C++      更新时间:2023-10-16

我知道C++有运算符,I不应该重载。

运算符"."是i不能重载的运算符之一。

但是,据我们所知,这种过载是坏的吗?

我认为,这真的很糟糕
但我不需要知道,如果我有对象或指向对象的指针
然而,这是有趣和危险的

class A {
     public:
           get_int(){ return a } 
           A(){ a=1 }
           operator A*(){ return this }
     private: int a;
};
int main(){
    A a;
    A* c = a;
    //here, c->get_int() will return 1
}

无论x是否为指针,都需要重载间接运算符->以允许通用x->foo()语法:

T * T::operator->() { return this; }

用法:

T x, * p = &x;
p->foo(); // OK as usual
x->foo(); // also OK, weirdly

示例:

#include <cstdio>
struct Foo
{
    void foo() { std::puts("Boo"); }
    Foo * operator->() { return this; }
};
int main() { Foo x, * p = &x; p->foo(); x->foo(); }