爲了避免在類中的字符串不必要的堆分配,我所採用類似於以下的模式:我應該使用const&iterator還是隻使用迭代器?
#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;
}
};
但是,代碼也似乎完全正常工作,當我說
void GetName(const Iter &iter) const // <----- changed to const &
是否有任何理由(性能或其他)使用const &
版本的迭代器,或者我應該使用Iter
本身? (我不知道迭代器的約定,或者是否有任何影響。)(C++ 03)
大多數迭代器類型都有非常簡單的內聯複製構造函數和析構函數,所以它不太可能產生重要的區別。但我有興趣看看是否有任何我沒有想到的因素。 – aschepler
@aschepler:是的。另外,這不僅僅是我擔心的參數傳遞的成本*(編譯器對於內聯非常聰明,就像你提到的那樣),而且還想知道是否有任何情況可能會破壞,因爲const ' - ... – Mehrdad