Skip to content

Latest commit

 

History

History
34 lines (25 loc) · 694 Bytes

027-cpp17-core-evaluation-order.md

File metadata and controls

34 lines (25 loc) · 694 Bytes

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

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

以下の式は、a, b, c, dの順番に評価されることが規格上保証される。

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

つまり、

int* f() ;
int g() ;

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

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

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

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