Меня всегда учили, что непримитивные типы должны передаваться по константной ссылке, а не по значению, где это возможно, т.е.:
void foo(std::string str);//bad
void foo(const std::string &str);//good
Но сегодня я подумал, что, возможно, на самом деле некоторые простые пользовательские типы лучше передавать по значению, например:
class Vector2
{
public:
float x, y;
...constructors, operators overloads, utility methods, etc...
};
void foo(Vector2 pos);
void foo(const Vector2 &pos);//is this really better than by value?
void foo(float x, float y);//after all isn't by value effectively doing this?
Я думаю, что передача Vector2 по ссылке на самом деле дороже, чем передача по значению, поскольку компилятор теперь использует указатель и разыменовывает для доступа к версии const Vector2 &pos?
Так ли это? Простые объекты лучше всего передавать по значению? Где должна быть проведена линия?
sizeof(T) <= sizeof(void*)
илиT
не являются примитивными. - person GManNickG   schedule 23.07.2010