在 C++11 之前,我会这样编写函数:
struct Color {
float R,G,B,A;
Color(float NewR,float NewG,float NewB,float NewA):
R(NewR),G(NewG),B(NewB),A(NewA)
};
struct Item {
Color color;
void SetColor(const Color& new_color)
{
color=new_color; // Copy is created
}
};
然后这样称呼它:
a_item.SetColor(Color(1.0f,1.0f,1.0f,1.0f));
Color new_color(1.0f,0.0f,0.0f,1.0f); // alternative way
a_item.SetColor(new_color);
现在使用 C++11,我在适用时编写这样的函数:
struct Item {
Color color;
void SetColor(Color new_color)
{
color=std::move(new_color); // No extra copy is created
}
};
然后这样称呼它:
a_item.SetColor(Color(1.0f,1.0f,1.0f,1.0f)); // already Rvalue
Color new_color(1.0f,0.0f,0.0f,1.0f); // alternative way
a_item.SetColor(std::move(new_color));
我想知道这是否是一个好习惯。似乎当对象所有权被转移时,我的函数变成了具有移动语义的按值传递。
说到 const 正确性,我的构造函数是否应该这样定义:
Color(const float NewR,const float NewG,const float NewB,const float NewA):
R(NewR),G(NewG),B(NewB),A(NewA)
我的 SetColor 函数是这样定义的?:
void SetColor(const Color new_color)
{
color=std::move(new_color); // No extra copy is created
}