恒定性
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;
}
通过 const-universal-ref 传递:
void MyClass::SetParameter(const std::string&& parameter)
{
m_parameter = parameter;
}
哪种变体最好(可能就 C++11 及其移动语义而言)?
附言。在某些情况下,函数体可能不正确。
按值传递:一般来说不好,因为可能会获取值副本。 (尽管移动构造函数可能会减轻)。
通过引用传递:功能不佳might修改传递的参数。也是匿名临时工cannot绑定到一个引用。
Pass by const
参考:还是最好的。没有复制,函数不能修改参数,匿名临时可以绑定到const
参考。
经过&&
变体:目前没有意义,因为根据您编写函数体的方式,没有移动语义。如果你写了std::move(m_parameter, parameter)
在某些情况下,代替赋值,这可能会胜过(3),并且编译器会选择更好的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)