[英]What does “*ptrInt ++” do?
我正在实现一个模板指针包装器,其功能类似于boost::shared_ptr
。
我有一个指向 integer ptrInt
的指针。
我想做的事:增加 integer ptrInt 指向的值。
我的初始代码是这样的: *ptrInt ++;
,虽然我也尝试过使用(*ptrInt) ++;
然而,显然,这似乎并没有达到我的预期。 最后我使用*ptrInt += 1;
,但是我问自己:
*ptrInt ++;
到底是什么? 做?*ptrInt += 1;
是否有更优雅的解决方案? ?*p++ // Return value of object that p points to and then increment the pointer
(*p)++ // As above, but increment the object afterwards, not the pointer
*p += 1 // Add one to the object p points to
最后两个都增加了 object,所以我不确定你为什么认为它不起作用。 如果将表达式用作值,则最终形式将返回递增后的值,而其他形式将返回之前的值。
x = (*p)++; // original value in x
(*p)++;
x = *p; // new value in X
或者
x = ++*p; // increment object and store new value in x
*ptr++
等价于*(ptr++)
(*ptr)++ 应该这样做,除非您立即使用它的值。 然后使用 ++*ptr,由于从右到左的关联性,它等价于 ++(*ptr)。
附带说明一下,这是我的智能指针实现,也许它可以帮助您编写自己的。
表达式使用运算符优先级规则进行评估。
++
的后缀版本( ++
出现在变量之后的版本)比*
运算符(间接)具有更高的优先级。
这就是*ptr++
等价于*(ptr++)
的原因。
您想要(*ptrInt)++
,它会增加 object,这通常与*ptrInt += 1
相同。 也许您重载了+=
运算符,但没有重载++
运算符(后缀和前缀递增运算符)?
更优雅的方式是您之前尝试过的任何方式。 即(*ptrInt) ++;
因为,您对此不满意,可能是因为后增量。
说, std::cout<<(*ptrInt) ++;
会向您显示未增加的值。
所以,试着给++(*ptrInt);
这可能会像您预期的那样运行。
*ptrInt++
在你的情况下确实增加了指针,仅此而已(在它从位置获取值之前将其丢弃。当然,如果你在更复杂的表达式中使用它,它将使用它)
(*ptrInt)++
您的需求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.