クラス内の文字列の不要なヒープ割り当てを回避するために、私は次のようなパターン採用している:私はconst&iterator、またはiteratorだけを使うべきですか?
void GetName(const Iter &iter) const // <----- changed to const &
を言うとき
#include <algorithm>
using namespace std;
class Person
{
public:
template<typename Iter>
void GetName(Iter iter) const // Allow for caller to provide the buffer
{
const char *name = ...; // Get the name
size_t cchName = ...; // Get the size
copy(&name[0], &name[cchName], iter);
}
string GetName() const // Convenience method
{
string name;
this->GetName(inserter(name, name.end()));
return name;
}
};
をただし、コードも完全に正常に動作するようです
const &
バージョンのイテレータを使用する理由(パフォーマンスなど)はありますか、それともIter
だけを使用する必要がありますか? (私はイテレータのコンベンションや、何か意味があるかどうか分かりません)。(C++ 03)
ほとんどのイテレータ・タイプは、非常に単純なインライン・コピー・コンストラクタとデストラクタを持っているため、重要な違いはありません。しかし私は、私が考えなかった要因があるかどうかを知ることに興味があります。 – aschepler
@aschepler:うん。また、私が心配している引数の*コスト*だけではありません(あなたが言及したように、コンパイラはインライン展開についてかなりスマートです)、constが原因でブレークするケースがあるかどうか疑問に思っています'-ness ... – Mehrdad