取消引用时奇怪的星号使用

Strange asterisk use while dereferencing

我今天看到如下代码:

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

让我感到困惑的主要部分是 this->*(*c) 在箭头 (->) 和我们正在访问的变量名称 (c).

你这里有一个你不常看到的运算符。

->* 是单个运算符。它是 .* 的基于指针的对应物,并且是成员访问运算符。

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

让我们分开:

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

编辑: 这个 post 也很好地解释了这里发生的事情:

表达式的解析树是这样的:

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

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