相关疑难解决方法(0)

当操作符超载时,如何可靠地获取对象的地址?

考虑以下程序:

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函数模板,但我不想在这里使用它:我想了解标准库实现者如何实现这个函数模板.

c++ operator-overloading memory-address c++11

167
推荐指数
5
解决办法
2万
查看次数

使用std :: addressof()函数模板而不是在C++中使用operator&是否有任何优势?

如果addressof operator&运行良好,那么为什么C++引入了addressof()函数?该&运营商从一开始的C++部分-为什么推出这个新功能呢?它是否比C的&运营商具有任何优势?

c++

84
推荐指数
1
解决办法
4065
查看次数

为什么有人想要重载&(地址)运算符?

可能重复:有
什么合理的理由使一元运算符超载?

我刚看了这个问题,我不禁想知道:

为什么有人可能想要重载&("address-of")运算符?

   some_class* operator&() const { return address_of_object; }

有没有合法的用例?

c++ overloading operator-overloading address-operator

20
推荐指数
3
解决办法
7860
查看次数

为什么我们允许采用不完整类型的地址?

考虑以下代码:

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++允许获取不完整引用类型的地址?

如上所示,它不可能是非法的吗?这是故意的吗?

c++ reference incomplete-type

10
推荐指数
1
解决办法
132
查看次数