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

时间:2011-07-02 20:27:42

标签: c++ pointers syntax

我正在实现一个类似于boost::shared_ptr的模板指针包装器。

我有一个指向整数ptrInt的指针。

我想做什么:将整数ptrInt指数增加到。

我的初始代码是:*ptrInt ++;,虽然我也尝试使用(*ptrInt) ++;

然而,显然,这似乎没有达到我的预期。 最后我使用*ptrInt += 1;开始工作,但我问自己:

  • *ptrInt ++;究竟做了什么?
  • 使用*ptrInt += 1;是否有更优雅的解决方案?

8 个答案:

答案 0 :(得分:9)

*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

最后两个都增加了对象,所以我不确定为什么你认为它不起作用。如果表达式用作值,则最终表单将在递增后返回值,但其他表单将返回之前的值。

x = (*p)++; // original value in x

(*p)++;
x = *p;     // new value in X

x = ++*p;   // increment object and store new value in x

答案 1 :(得分:4)

*ptr++相当于*(ptr++)

答案 2 :(得分:3)

*ptrInt ++

  1. 将ptrInt增加1

  2. 取消引用ptrInt的旧值

  3. (*ptrInt) ++以及*ptrInt += 1会做你想要的。

    请参阅Operator Precedence

答案 3 :(得分:1)

(* ptr)++应该这样做,除非你马上使用它的值。然后使用++ * ptr,由于从右到左的关联性,它相当于++(* ptr)。

另一方面,here is my smart pointer implementation,也许它可以帮助你写自己的。

答案 4 :(得分:0)

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

++的后缀版本(++位于变量之后的版本)的优先级高于*运算符(间接)。

这就是为什么*ptr++等同于*(ptr++)

答案 5 :(得分:0)

您需要(*ptrInt)++,它会递增对象,通常与*ptrInt += 1相同。也许你已经重载+=运算符,而不是++运算符(后缀和前缀增量运算符)?

答案 6 :(得分:0)

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

因为你不满意,可能是因为后期增加。

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

因此,请尝试给出++(*ptrInt);,这可能与您预期的一样。

答案 7 :(得分:-1)

在你的情况下,

*ptrInt++会增加指针,不再是(在此之前它从该位置获取值抛出它。当然如果你在一个更复杂的表达式中使用它将使用它)< / p>

(*ptrInt)++可以满足您的需求。