考虑以下程序:
struct ghost
{
// ghosts like to pretend that they don't exist
ghost* operator&() const volatile { return 0; }
};
int main()
{
ghost clyde;
ghost* clydes_address = &clyde; // darn; that's not clyde's address :'(
}
Run Code Online (Sandbox Code Playgroud)
我怎么得到clyde地址?
我正在寻找一种适用于所有类型对象的解决方案.C++ 03解决方案会很好,但我也对C++ 11解决方案感兴趣.如果可能,让我们避免任何特定于实现的行为.
我知道C++ 11的std::addressof函数模板,但我不想在这里使用它:我想了解标准库实现者如何实现这个函数模板.
如果addressof operator&运行良好,那么为什么C++引入了addressof()函数?该&运营商从一开始的C++部分-为什么推出这个新功能呢?它是否比C的&运营商具有任何优势?
可能重复:有
什么合理的理由使一元运算符超载?
我刚看了这个问题,我不禁想知道:
为什么有人可能想要重载&("address-of")运算符?
some_class* operator&() const { return address_of_object; }
有没有合法的用例?
考虑以下代码:
class Addressable;
class Class1 { void foo(Addressable &a) { (void) &a; } }; // OK
class Addressable { void *operator &() { return this; } };
class Class2 { void foo(Addressable &a) { (void) &a; } }; // Error: operator & private
Run Code Online (Sandbox Code Playgroud)
为什么C++允许获取不完整引用类型的地址?
如上所示,它不可能是非法的吗?这是故意的吗?