表达式'(void *)& this-> A'是什么意思?

时间:2018-06-07 02:40:43

标签: c++

在C ++中,表达式(void*)&this->A是否等同于表达式void this->A?我在源代码中找到它作为函数输入参数。为什么这样做? (void*)&this->Avoid this->A之间有什么区别?

2 个答案:

答案 0 :(得分:2)

(void*)&this->Athis->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))是等效的。