2009-03-25 2 views

答えて

41

未定義の動作 - front()を呼び出す前に、コンテナにempty()(コンテナが空であるかどうかを調べる)を使用しているかどうかを確認する必要があります。

+0

また、empty()を使用することもできます。 –

+1

私は彼らがSTLを設計し指定したときに、より具体的になりたいと思っています。私は、多くのC++移植の問題やバグが、あまりにも良いプログラマによって悪用されたこれらの「未定義の振る舞い」のプラットフォーム固有の実装によって引き起こされたと考えています。 –

+0

UBを作成するという決定は、通常、代替案にいくらかのオーバーヘッドがあったことを意味します。この場合は、例外をスローします.C++は常に回避しようとしています。 –

12

未定義の動作が発生します。

(0)で範囲チェックを使用します。これが失敗すると、out_of_range例外が発生します。

1

未定義の動作あなたは常にあなたのコンテナが、このインスタンスのフロント()を呼び出す前に、空でないことを確認する必要がありました

1

。 安全なガードとしてempty()を呼び出すのは良いです。

もちろん、あなたのプログラムの設計によっては、常に空でないコンテナを持つことは、あなたがfront()を呼び出すたびにempty()への呼び出しを禁止して保存できるようにする不変のステートメントになります。 (またはコードの少なくとも一部)

しかし、上記のように、プログラムの不確定な動作を避けたい場合は、それを強く不変なものにします。

2

はい、フロントを使用する代わりに、グラハムのように 'at'を使用できます。

しかし、(0)はベクトル、デキュー、および他のものではないリスト、キュー、スタックの一部のコンテナでのみ利用可能です。このような場合には、「空の」小切手の安全性に転じなければなりません。

関連する問題