取消引用时奇怪的星号使用
Strange asterisk use while dereferencing
我今天看到如下代码:
result = (this->*(*c))(¶m)
让我感到困惑的主要部分是 this->*(*c)
在箭头 (->
) 和我们正在访问的变量名称 (c
).
你这里有一个你不常看到的运算符。
->*
是单个运算符。它是 .*
的基于指针的对应物,并且是成员访问运算符。
如果您有一个要在其上使用成员的对象(例如函数),但不知道具体成员(它存储在变量中),则使用它。
让我们分开:
this // object to work on
->* // member access operator
(*c) // dereference pointer pointing to member function (c is a pointer-to-pointer)
(¶m) // call member function stored in c on this passing ¶m to the function
另请参阅:http://en.cppreference.com/w/cpp/language/operator_member_access
编辑: 这个 post 也很好地解释了这里发生的事情:
表达式的解析树是这样的:
=
/ \
result function call
/ \
->* &
/ \ |
this * param
|
c
由于无聊的语法原因,括号是必需的。
我今天看到如下代码:
result = (this->*(*c))(¶m)
让我感到困惑的主要部分是 this->*(*c)
在箭头 (->
) 和我们正在访问的变量名称 (c
).
你这里有一个你不常看到的运算符。
->*
是单个运算符。它是 .*
的基于指针的对应物,并且是成员访问运算符。
如果您有一个要在其上使用成员的对象(例如函数),但不知道具体成员(它存储在变量中),则使用它。
让我们分开:
this // object to work on
->* // member access operator
(*c) // dereference pointer pointing to member function (c is a pointer-to-pointer)
(¶m) // call member function stored in c on this passing ¶m to the function
另请参阅:http://en.cppreference.com/w/cpp/language/operator_member_access
编辑: 这个 post 也很好地解释了这里发生的事情:
表达式的解析树是这样的:
=
/ \
result function call
/ \
->* &
/ \ |
this * param
|
c
由于无聊的语法原因,括号是必需的。