0

我希望能够在 C++ 标准编译器中做到这一点:

void DoSomething(Object* object) { }

DoSomething(&Object())

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

所以这就是我所拥有的:

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

这显然只是一个重复循环,无法指定我想要基本的 & 运算符,而不是覆盖的运算符。当我调用 DoSomething(&Object()) 时也不会调用它。这可能吗?它会使初始化复杂类型变得更容易,所以它很重要。

4

2 回答 2

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);
}

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

于 2013-01-05T20:26:07.693 回答
0

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

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

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

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

根据您实际尝试做的事情,解决方案会大不相同。

于 2013-01-05T20:27:31.273 回答