戻り値は時には有用な場合もあります。有用でない場合は、それらを使用する必要はありません。
すべてcontainer.erase
関数は、新たに消去された範囲の後にイテレータを返します。非ノードベースのコンテナの場合、範囲内のイテレータとその後のイテレータはもはや有効ではないため、これは(必ずしもそうではありませんが)しばしば役に立ちます。
ノードベースのコンテナの場合、2番目のイテレータが渡されると、消去操作後でも有効なままなので、これは通常役に立たなくなります。
いずれにせよ、どちらもイテレータを返します。これにより、ジェネリックコンテナで動作するコードは、コンテナが消去後に有効なイテレータを保持しているかどうかを知る必要がなくなります。それは単に戻り値を格納し、後で消去するための有効なイテレータを持つことができます。
C++標準コンテナのイテレータは、作成、破棄、コピーするのに非常に安価です。実際には、コンパイラが使用されていなければ完全に削除することができるので、実際には安価です。したがって、使用されていないイテレータを返すと、実行時コストはゼロになります。
ここでこの戻り値を使用しないプログラムは、意味的および構文的に正しいプログラムにすることができます。同時に、他の意味的および構文的に正しいプログラムでは、その戻り値を使用する必要があります。最後に
、
mylist.erase(it1, it2);
これはイテレータを返すん。イテレータは直ちに破棄されます(戻り値は名前のない一時的なものとしてのみ存在します)。また、コンパイラはその値を最適化する可能性があります。
しかし、戻り値を格納していないからといって、返されないというわけではありません。
戻り値の型を気にしない場合、なぜそれを格納しますか? – user975989
あなたはそれを使用するつもりがない場合は、いつでも返品を無視することができます。また最近では 'auto'を使用しています:) –
すべての教授が学生に" auto "を使用できるわけではありません。彼らは私たちがどのようにタイプを理解しているかを私たちにテストする必要があります。 –