是否有例外规则,如果地址可以使用&它是左值找到?

Is there exception to rule that if address can be find out using & it's lvalue?

是否有任何例外规则,如果我可以使用 & 找到地址,它是左值,否则是右值?

例如,

int i;

&i 会给出 i 的地址,但我不能获取 (i + 5) 的地址,除非我是指针或数组。

此致

最明显的例外是为您自己的类型重载前缀 & 运算符:

#include <iostream>

struct X
{
    X* operator&()
    {
        return this;
    }
};

int main()
{
    std::cout << &X() << '\n';
}

这会打印临时对象的地址,当我 运行 它时恰好是 0x7fff76012d9f