繁体   English   中英

C++ 优先级和关联性

[英]C++ Precedence and Associativity

这段代码:

int scores[] {1,2,3,4};
int *score_ptr {scores};  
//let's say that initial value of score_ptr is 1000
std::cout<<*score_ptr++;

产生 output:

1

由于*++具有相同的优先级,然后关联性是从右到左,我们不应该先应用++运算符,即先增加指针然后* (取消引用)吗?

因此, score_ptr将相应地增加到1004 ,然后取消引用它将给出分数的第二个元素,即2

这如何以及为什么给我 output 的1而不是2

因为*++具有相同的优先级

不,后缀operator++优先级高于operator* 那么*score_ptr++等价于*(score_ptr++) 请注意, 后缀operator++将递增操作数并返回原始值,然后*(score_ptr++)将给出值1

结果是操作数原始值的纯右值副本。

另一方面,前缀operator++返回递增的值。 如果您将代码更改为*++score_ptr (相当于*(++score_ptr) ),那么结果将是2 (这可能是您所期望的)。

递增先发生,优先级更高,相当于*(score_ptr++) ,但它是后自增,这意味着它只会在使用取消引用的指针之后发生,即表达式达到; .

如果你使用

std::cout << *++score_ptr;

然后你有一个预增量,这里它会提前发生,指针将在使用值之前递增,并且 output 将为2 等效于*(++score_ptr)

请注意,使用括号总是一个好主意,它将使代码更清晰,并避免误解。

暂无
暂无

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

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