Чтобы избежать ненужного выделения куч в строках внутри класса, я принял шаблон, подобный следующему:
#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;
}
};
Однако код, кажется, также работает отлично, когда я говорю1004 *
void GetName(const Iter &iter) const // <----- changed to const &
Есть ли какая-либо причина (производительность или иное) для меня, чтобы использовать const &
версию итератора, или я должен просто использовать Iter
сам?(Я не знаю соглашения для итераторов или есть ли какие-либо последствия.) (C ++ 03)