unary がオーバーロードされたユーザー定義型でoperator&
、そのアドレスが必要な場合は、 を使用しますaddressof
。
&
あなたが言うように、そうしないとオーバーロードの目的が無効になるため、常に使用する必要があると思います。もちろん、オーバーロードで何か意味のあることをしない限りaddressof
、その場合は必要になりますが(クラスの外では、内部で を使用できますthis
)、自分が何をしているのかを非常に確信している必要があります。
operator&
詳細は次のとおりです-クラス外でオーバーロードしたい場合(可能です)、アドレスを返すために使用する必要があります。そうしないと、無限再帰が発生します。addressof
struct Class
{
virtual ~Class() {}
int x;
};
void* operator&(const Class& x)
{
//return &x; <---- infinite recursion
return addressof(x) + 4; //I know this isn't safe
//but I also know the intrinsics of my compiler
//and platform to know this will actually return
//the address to the first data member
}
私はこれが安全ではないことを知っています。