解除引用时使用奇怪的星号

时间:2015-04-10 18:57:45

标签: c++ dereference

我今天看到的代码如下:

result = (this->*(*c))(&param)

令我困惑的主要部分是this->*(*c)在箭头(->)和我们正在访问的变量的名称之间设置星号运算符是什么意思({{ 1}})。

2 个答案:

答案 0 :(得分:4)

这里有一个你经常看不到的操作员。

->*是一个操作员。它是.*的基于指针的对应项,是一个成员访问运算符。

如果您有一个对象使用成员(例如函数),但不知道具体成员(它存储在变量中),则使用它。

让我们把它分开:

this      // object to work on
->*       // member access operator
(*c)      // dereference pointer pointing to member function (c is a pointer-to-pointer)
(&param)  // call member function stored in c on this passing &param to the function

另请参阅:http://en.cppreference.com/w/cpp/language/operator_member_access

修改:这篇文章还详细介绍了这里发生的事情:https://stackoverflow.com/a/6586248/1314789

答案 1 :(得分:0)

表达式的解析树是:

                         =
                  /            \
               result     function call
                            /       \
                          ->*        &
                         /   \       |
                       this   *    param
                              |
                              c

由于无聊的语法原因,括号是必要的。