C ++覆盖地址运算符

时间:2013-01-05 20:21:45

标签: c++ operator-keyword

我希望能够在C ++标准编译器中执行此操作:

void DoSomething(Object* object) { }

DoSomething(&Object())

使用默认地址运算符,它会将该构造对象保存到寄存器中,然后在DoSomething()中覆盖它...对于所有对象,在一行中执行此操作会非常好(除了可以使用的基类型)不要覆盖它们。

所以这就是我所拥有的:

class Object
{
    public:
        Object* operator&(Object object) { return &object; }
};

这显然只是一个反复出现的循环而无法指定我想要的基本&运算符,而不是重写的运算符。当我调用DoSomething(& Object())时,它也没有被调用。这可能吗?这将使复杂类型的初始化变得更容易,因此它非常重要。

2 个答案:

答案 0 :(得分:4)

你可以在C ++ 11中这样做:

class Object
{
    public:
};

Object* operator&(Object&& object) { return std::addressof(object); }
Object const* operator&(Object const&& object) { return std::addressof(object); }

所有对象:

template<typename T>
T* operator&(T&& x) {
    return std::addressof(x);
}

请不要这样做。人们会恨你。

答案 1 :(得分:0)

通常不会在 C ++ 中执行此操作。有办法做到这一点,但只是在寻找麻烦。相反, C ++ 解决方案可以:

void DoSomething( Object const& object ){ ... }

但也许您需要能够对非const 对象进行操作。在这种情况下,你会这样做:

void DoSomething( Object& object ){ ... } // operate on an lvalue, object with a name
void DoSomething( Object&& object ){ ... } // operate on an rvalue, either temporary or moved object

根据您实际尝试的内容,解决方案会有很大差异。