2016-12-26

誤り:paizaの問題はC++17でも成り立つ

この記事は間違っていた。

この変更では、インクリメント演算子の副作用のコミット順序はまだ規定されていない。

paizaが以下のような質問を出している。

問題は、int i = 0 ;であるとき、以下の式を評価した結果が1になるのはどれかという問題だ。
  1. i++ + ++i
  2. ++i + ++i
  3. i++ + i++
  4. ++i + i++

C言語では、この式を評価した結果は未定義である。

C++14までは、この式を評価した結果は未定義である。

C++17では、サブ式の評価順序が固定されたことにより、この式は以下のように評価されることが規格上保証されている。

C++17でも未だに未定義。§1.10 p18に書かれている。

  1. 2
  2. 3
  3. 1
  4. 2

参考:

[PDF] P0145R3: Refining Expression Evaluation Order for Idiomatic C++

P0400R0: Wording for Order of Evaluation of Function Arguments

現在、Clang 4.0 headがP0145R3とP0400R0を正しく実装している。GCC 7 headはP0145R3の実装を謳っているが現時点ではバグのため、2番目の式の評価が4になるようだ。

ドワンゴ広告

ドワンゴは本物のC++プログラマーを募集しています。

採用情報|株式会社ドワンゴ

CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0

5 comments:

Anonymous said...

isocpp.orgの最新のDraft(http://open-std.org/JTC1/SC22/WG21/docs/papers/2016/n4618.pdf)の12ページ下のExampleを見ると、

i = i++ + i; // the behavior is undefined

となっているので、C++17でも「i++ + ++i」のような式の評価値も、undefinedなのかなとと思ってたのですが、どうなんでしょう?

江添亮 said...

あれ・・・
それを変更し忘れているのだろうか。

Anonymous said...

ご確認ありがとうございます。undefinedなのですね・・・。

ADMIN said...

MNCQQ.COM- Selamat di mncqq.com Daftar Situs Poker Online Terpercaya Indonesia

 Agen Poker
Agen Poker Terbaik
Agen Poker Terpercaya
Daftar Poker
Daftar Poker Online
Situs Poker
Bandar Poker
Bandar Poker Terpercaya
Situs Poker Texas
Pusat Poker
Kumpulan Situs Poker Terpercaya
Game Texas poker
Texas Poker Uang Asli
Poker Indonesia
Daftar Situs Texas Poker Terpercaya
AgenTexas Poker Terpercaya
SitusTexas Poker Terpercaya
Situs Texas Poker
Daftar Situs Texas Poker
Situs Texas Poker
Link Alternatif Poker.
Link Alternatif Poker Online
Daftar Situs Poker Terpercaya
Poker Online Terpercaya
Poker Online Terbaik
Poker Online Terpercaya

ADMIN said...

texaspokerterpercaya.net- Selamat di texaspokerterpercaya.net Daftar Situs Poker Online Terpercaya Indonesia yang menggunakan uang rupiah asli

 AgenTexas Poker
Texas Poker Terpercaya
Poker Online
Agen Poker Online
Daftar Situs Poker Online
Poker Texas Terpercaya
Daftar Poker online
Situs Poker Texas
Pusat Poker
Kumpulan Situs Poker Terpercaya
Game Texas poker
Texas Poker Uang Asli
Poker Indonesia
Daftar Situs Texas Poker Terpercaya
AgenTexas Poker Terpercaya
SitusTexas Poker Terpercaya
Situs Texas Poker
Daftar Situs Texas Poker
Situs Texas Poker
Link Alternatif Poker
Link Alternatif Poker Online
Daftar Situs Poker Terpercaya
Poker Online Terpercaya
Poker Online Terbaik
Poker Online Terpercaya