Skip to content

Latest commit

 

History

History
35 lines (26 loc) · 797 Bytes

027-cpp17-core-evaluation-order.md

File metadata and controls

35 lines (26 loc) · 797 Bytes

演算子のオペランドの評価順序の固定

C++17では演算子のオペランドの評価順序が固定された。

以下の式は、a, bの順番に評価されることが規格上保証される。@=@には文法上許される任意の演算子が入る(+=, -=など)。

a.b
a->b
a->*b
a(b1,b2,b3)
b = a
b @= a
a[b]
a << b
a >> b

つまり、

int* f() ;
int g() ;

int main()
{
   f()[g()] ; 
}

と書いた場合、関数fがまず先に呼び出されて、次に関数gが呼び出されることが保証される。

関数呼び出しの実引数のオペランドb1, b2, b3の評価順序は未規定のままだ。

これにより、既存の未定義の動作となっていたコードの挙動が定まる。