簡體   English   中英

下標是否在賦值運算符的右側之前計算

[英]does subscript evaluate before the right hand side of assignment operator

我正在嘗試做類似的事情

arr[getchar()-'a'] = getchar();

是否保證這里的下標在其他任何事情之前評估?

C++17之前,不保證順序

C++17 開始:(來自C++ 的求值順序

17) 在下標表達式 E1[E2] 中,E1 的每個值計算和副作用都排在 E2 的每個值計算和副作用之前

20) 在每個簡單賦值表達式 E1=E2 和每個復合賦值表達式 E1@=E2 中,E2 的每個值計算和副作用都在 E1 的每個值計算和副作用之前排序

所以在你的情況下:

   arr[getchar()-'a'] = getchar();
// (2)  (3)              (1)

不,不能保證。 (至少對於 C++17 之前的代碼,正如其他人提到的那樣)。

按照評估規則的順序(強調我的):

任何表達式的任何部分的求值順序,包括函數參數的求值順序是未指定的 [...]。 編譯器可以以任何順序計算操作數和其他子表達式,並且在再次計算相同表達式時可以選擇其他順序。

C++ 中沒有從左到右或從右到左求值的概念。 這不要與運算符的從左到右和從右到左結合性混淆:表達式 a() + b() + c() 被解析為 (a() + b()) + c( ) 由於 operator+ 的從左到右結合性,但對 c 的函數調用可能會在運行時首先、最后或在 a() 或 b() 之間進行評估

我在這里引用了 C++ 參考,但同樣適用於 C

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM