在 c++ 中是否有办法使用点运算符而不是 -> 来表示 pSomePointer->pValue->nSubvalue



我知道在 c++ 中

pSomePointer->pValue = (*pSomePointer).pValue 

我如何以上述形式表示以下情况:

pSomePointer->pValue->nSubvalue

我知道我们在代码中使用pSomePointer->pValue->nSubvalue,但我只是好奇是否有任何方法可以在c ++中做到这一点。

我尝试过并得到错误的是:

(*pSomePointer).(*pValue) ).nSubvalue;
(*pSomePointer.pValue).nSubvalue;

谢谢你的帮助。

我认为您唯一真正缺少的是->.的优先级高于*,并且->.的右侧是一个简单的标识符,而不是一般表达式。

有了这个,我们得到

foo->bar->baz

相当于

(foo->bar)->baz

相当于

((*foo).bar)->baz

相当于

(*((*foo).bar)).baz

相当于

(*(*foo).bar).baz

(在去除一对多余的帕伦斯之后(。


您的尝试不起作用,因为.(是语法错误,并且*pSomePointer.value解析为*(pSomePointer.value)(并且您不能在指针上使用.(。

是的,可以做到。让我将其分为几个步骤:

我们有一个指针pSomePointer.现在,我们要获取实际对象(pointee(:

*pSomePointer

现在,我们要从这个对象获取成员value

(*pSomePointer).value

现在我们需要取消引用我们的表达式,以获得一个由value指向的对象

*((*pSomePointer).value)

现在我们可以访问对象subvalue

(*((*pSomePointer).value)).subvalue

在线查看!


话虽如此,我强烈建议不要使用这种符号。它非常难以阅读并且非常容易出错(尽管这些错误主要是编译器错误(。
操作员->是程序员的创造者,并为此赞扬了提交者。

最新更新