【发布时间】:2015-10-02 20:44:27
【问题描述】:
恒定性
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 及其移动语义而言)?
PS。可能是函数体在某些情况下不正确。
【问题讨论】:
-
你最后两个例子不是通用引用,它们是右值引用。
-
答案可能会有所不同,具体取决于类的语义和您要实现的目标。如果不确定/一般情况 const ref 是最好的
-
@Andre 我想要实现的目标:它是一个简单的私人成员设置器。不管语义是什么。
标签: c++ c++11 parameter-passing