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;