C++ 地址

C++ 地址,c++,pointers,this,C++,Pointers,This,我试图找到这个指针的地址,但是这个代码显示了一个奇怪的错误 错误: #包括 使用名称空间std; 阶级基础 { 公众: 无效测试() { void*address\u of_this=&this; cout此是一个指针,包含指向“当前对象”的地址。它不是存储在某处的变量(甚至不可能更改),而是具有这些属性的特殊关键字 因此,获取其地址毫无意义。如果您想知道“当前对象”的地址,只需输出: std::cout << this; 引用2003 C++标准: 5.1[expr.prim]关

我试图找到
这个
指针的地址,但是这个代码显示了一个奇怪的错误
错误:

#包括
使用名称空间std;
阶级基础
{
公众:
无效测试()
{
void*address\u of_this=&this;

cout
是一个指针,包含指向“当前对象”的地址。它不是存储在某处的变量(甚至不可能更改),而是具有这些属性的特殊关键字

因此,获取其地址毫无意义。如果您想知道“当前对象”的地址,只需输出:

std::cout << this;

引用2003 C++标准:

5.1[expr.prim]关键字
命名一个指向调用非静态成员函数(9.3.2)的对象的指针…表达式的类型是指向函数类(9.3.2)的指针,…表达式是一个右值

5.3.1[expr.unary.op]一元
运算符的结果是指向其操作数的指针。操作数应为左值或限定id


简单地说,
&
需要一个左值。
这是一个右值,而不是左值,正如错误消息所指出的。

通过使用当前对象的地址来引用它

在您的问题中,有两个错误:

  • 不是左值

    &
    需要左值。左值是指可以出现在赋值左侧的值(变量、数组等)

    为右值。右值不能出现在左侧(加法、减法等)

    参考文献:

  • 因此,我还想提到一个隐藏的错误:

    address\u这个
    实际上是接收一个地址的地址

    基本上,
    &这个
    被翻译成类似于
    &&object
    &&object)


基本上,将此
视为
对象
(但要记住,因为它不是真的)。

尝试在=signFinally.后面添加空格。理性之声。在标准语言中:
为右值(不是类类型),所以它没有地址。在Standardese中,
这是prvalue-pure-rvalue。您想在第二个错误中暗示什么还不是很清楚。
std::cout << this;
void* a = this;