2011-01-23 17 views
2

に私が「ビャーネ・ストロヴストルップのC++スタイルとテクニック」よくある質問を読んでいました引数は未定義です。 "彼がf(v [i]、i ++)を参照しているとき。例。順序は、C++

は、私は、関数の引数の評価の順序は不定未定義が、この場合には、我々はどのV [i]が合格またはそのANにするように、iの値に依存しているので、それは未定義ではないことを認識していFAQ自体のエラー?

+0

私は正直なところ、*未定義*と*未定義*の区別を気にする必要のある人は、C++コンパイラの作家であると信じています。 – Oystein

+0

@DavidそれはSOの使い方とは何ですか?レート、バッジ、ナンバーに関わらない知識を得る。投票の...あなたが死ぬときにuでこれをすべて取るつもりです。 –

+0

ここでシステムと一緒に遊ぶなら、より多くの知識を得ることができる人がもっと喜んで助けてくれるかもしれません。それが私の主張です。 –

答えて

4

関数の引数の評価の順序は不定であるが、発現の動作は未定義です。 Bjarneはちょうどそれを間違ってしまった。 :-)

は、未指定の挙動と未定義の動作の違いを理解するためにthisスレッドをチェックしてください。

個人的に

..私は一度Bjarneに unspecifiedundefinedの間の差を求め、これが彼の返事だった、私は「未定義」と「未指定」の区別を気にしないでください。あなたはそれが何であるか知っていますか?このコードは、いずれの場合に取り出して撮影する必要があります。

.....あなたが知っている必要はありません

は(慎重に「未定義」と「未指定」という言葉を避けて):ちょうど両方を避けます。誰かが本当に知りたがっているのであれば、C++やCの標準で定義を調べることができます(私の考えは、CやC++の標準は重要ではないということに同意します)。

+0

thanx prasoon! Bjarneの回答を投稿する –

0

は、私たちはここの意味で失われていると思います。仕様は、直接的または省略による定義です。不特定の行動の多くは、実装定義の振る舞いを通じて最適化を可能にするために残された、何があなたが異なるコンパイラやハードウェアにコードを移動し、少なくとも場合は、ので、あなたのコードは、一般性を失い、そしてそれはまた、おそらく、明快さとシンプルさを失ってしまった、未定義の動作につながります。 Brian Kernighan氏によると、潜在的な「副作用」の手法を利用しようとするコードは、しばしば良いスタイルではありません。しかし、誰かがBjarne Stroustrupを "間違っている"と指摘したのは面白かったです。 :)