簡體   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