恒常性
class MyClass {
// ...
private:
std::string m_parameter;
// ...
}
按值传递:
void MyClass::SetParameter(std::string parameter)
{
m_parameter = parameter;
}
通过引用:
void MyClass::SetParameter(std::string& parameter)
{
m_parameter = parameter;
}
通过常量引用:
void MyClass::SetParameter(const std::string& parameter)
{
m_parameter = parameter;
}
按常量值传递:
void MyClass::SetParameter(const std::string parameter)
{
m_parameter = parameter;
}
通用引用传递:
void MyClass::SetParameter(std::string&& parameter)
{
m_parameter = parameter;
}
传递常量通用引用:
void MyClass::SetParameter(const std::string&& parameter)
{
m_parameter = parameter;
}
哪个变体最好(可能就 C++11 及其移动语义而言)?
附言。可能是函数体在某些情况下不正确。
最佳答案
按值传递:一般情况下不好,因为值拷贝可能会被采用。 (虽然移动构造函数可能会减轻)。
通过引用传递:不好,因为函数可能修改传递的参数。此外,匿名临时不能绑定(bind)到引用。
通过
const
引用:仍然是最好的。没有复制,函数不能修改参数,匿名临时变量可以绑定(bind)到const
引用。通过
&&
变体传递:目前没有意义,因为在您编写函数体的方式中没有移动语义。如果您编写了std::move(m_parameter, parameter)
来代替赋值,那么在某些情况下这可能会胜过 (3),并且编译器会选择更好的。
关于c++ - const 或 ref 或 const ref 或 value 作为 setter 函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31402796/