C ++ ANSI ISO IEC 14882 2003 Annex C.1(668ページ):
変更:条件式、代入式、またはコンマ式の結果は、左辺値である可能性があります
。理論的根拠:C + +はオブジェクト指向言語であり、左辺値に比較的重点を置いています。たとえば、関数は左辺値を返す場合があります。
元の機能への影響:明確に定義された機能のセマンティクスに変更します。左辺値から右辺値への変換に暗黙的に依存する一部のC式では、異なる結果が得られます。例えば、
char arr[100];
sizeof(0, arr)
C++およびCで100を生成しsizeof(char*)
ます
。..。
私はちょうど今日これを読んでいて、数ヶ月前に私の友人が問題を提案したことを思い出しました。それは、C ++でコンパイルされた場合は0を返し、Cでコンパイルされた場合は1を返す関数を書くことでした。これは、Cでは構造体が外部スコープにあるという事実を利用しています。したがって、この新しい情報を考慮して、これはMicrosoft Visual Studio 2008で試した上記の問題の別の解決策になると判断しましたが、CまたはC ++コードとしてコンパイルされているかどうかに関係なく、sizeof(0, arr)
常に4が生成されます。
1.ISO Cとは何ですか?それは現在のC標準ですか?それだけですか(Cは急速に進化していると聞きました)2。これはMicrosoft C ++のバグですか?
TIA
編集:申し訳ありませんが、出力と混同して編集しました: