繁体   English   中英

“*ptrInt ++”有什么作用?

[英]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++)

*ptrInt ++

  1. 将 ptrInt 增加 1

  2. 取消引用 ptrInt 的旧值

(*ptrInt) ++以及*ptrInt += 1会做你想做的事。

请参阅运算符优先级

(*ptr)++ 应该这样做,除非您立即使用它的值。 然后使用 ++*ptr,由于从右到左的关联性,它等价于 ++(*ptr)。

附带说明一下,这是我的智能指针实现,也许它可以帮助您编写自己的。

表达式使用运算符优先级规则进行评估。

++的后缀版本( ++出现在变量之后的版本)比*运算符(间接)具有更高的优先级。

这就是*ptr++等价于*(ptr++)的原因。

您想要(*ptrInt)++ ,它会增加 object,这通常与*ptrInt += 1相同。 也许您重载了+=运算符,但没有重载++运算符(后缀和前缀递增运算符)?

优雅的方式是您之前尝试过的任何方式。 (*ptrInt) ++;

因为,您对此不满意,可能是因为后增量。

说, std::cout<<(*ptrInt) ++; 会向您显示未增加的值。

所以,试着给++(*ptrInt); 这可能会像您预期的那样运行。

*ptrInt++在你的情况下确实增加了指针,仅此而已(在它从位置获取值之前将其丢弃。当然,如果你在更复杂的表达式中使用它,它将使用它)

(*ptrInt)++您的需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM