我一直被教导说,尽可能使用const引用而不是值来传递非原始类型,例如:
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版本?
这是真的吗?简单的对象最好通过值传递吗?应该在哪里划线?
T
是基本类型或者sizeof(T) <= sizeof(void*)
。 - GManNickG