我希望能够在C ++标准编译器中执行此操作:
void DoSomething(Object* object) { }
DoSomething(&Object())
使用默认地址运算符,它会将该构造对象保存到寄存器中,然后在DoSomething()中覆盖它...对于所有对象,在一行中执行此操作会非常好(除了可以使用的基类型)不要覆盖它们。
所以这就是我所拥有的:
class Object
{
public:
Object* operator&(Object object) { return &object; }
};
这显然只是一个反复出现的循环而无法指定我想要的基本&运算符,而不是重写的运算符。当我调用DoSomething(& Object())时,它也没有被调用。这可能吗?这将使复杂类型的初始化变得更容易,因此它非常重要。
答案 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
根据您实际尝试的内容,解决方案会有很大差异。