为什么在取消引用的指针上调用成员函数时需要括号?

My *_*ug. 1 c++

为什么此代码片段中指针周围的括号是必要的?

cout << (*pStr).size() << endl;
Run Code Online (Sandbox Code Playgroud)

回顾我的书后,我终于在我看过的脚注中发现了一点小小的提及。

它说:“——这确保了点运算符将应用于指针指向的对象。”

为什么这不起作用?

cout << *pName.size() << endl;
Run Code Online (Sandbox Code Playgroud)

我之所以这么问,是因为我的书没有给出很好的解释,而且我只是浪费了很多时间试图找出为什么这行代码给我带来了错误。(当然我忘了括号)

M.M*_*M.M 5

.优先级高于*. 所以*foo.bar意思是*(foo.bar)

所以这段代码是无效的,因为.运算符不能应用于指针

(我使用了一个没有函数调用运算符的示例,()因为它的优先级也更高,*所以它变得复杂)。

请记住,您可以而且应该写pName->size()。大概是->为了避免所有这些括号而创建的。