在C ++中,表达式(void*)&this->A
是否等同于表达式void this->A
?我在源代码中找到它作为函数输入参数。为什么这样做? (void*)&this->A
和void this->A
之间有什么区别?
答案 0 :(得分:2)
(void*)&this->A
将this->A
的地址强制转换为无效指针。
你提到这是作为函数输入参数传递的 - 它可能是以这种方式进行转换,因为函数需要void*
参数,而this->A
本身就是其他类型。< / p>
答案 1 :(得分:1)
由于缺乏parens而令人困惑,但它基本上是指向操作的顺序可能令人困惑,但是它本质上是指向void *
的指针this->A
。void *
的指针(this->A
}。它所指向的类型this->A
已经被转移出来并且是void
。
这样做的一个原因是,您可以通过外部API传递值,而不会知道您自己的类型。例如返回用户定义数据的回调&amp;上下文。
#include <iostream>
using namespace std;
struct Foo {
int A;
void bar() {
cout << (void *)&this->A << endl;
cout << (void *)(&(this->A)) << endl;
}
};
int main(int argc, char **argv) {
Foo f{2};
f.bar();
return 0;
}
输出(在我的机器上):
0x7ffee8b01658
0x7ffee8b01658
因此,(void *)&this->A
和(void *)(&(this->A))
是等效的。