gpt4 book ai didi

c++ - const 或 ref 或 const ref 或 value 作为 setter 函数的参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:47 24 4
gpt4 key购买 nike

恒常性

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 及其移动语义而言)?

附言。可能是函数体在某些情况下不正确。

最佳答案

  1. 按值传递:一般情况下不好,因为值拷贝可能会被采用。 (虽然移动构造函数可能会减轻)。

  2. 通过引用传递:不好,因为函数可能修改传递的参数。此外,匿名临时不能绑定(bind)到引用。

  3. 通过 const 引用:仍然是最好的。没有复制,函数不能修改参数,匿名临时变量可以绑定(bind)到 const 引用。

  4. 通过 && 变体传递:目前没有意义,因为在您编写函数体的方式中没有移动语义。如果您编写了 std::move(m_parameter, parameter) 来代替赋值,那么在某些情况下这可能会胜过 (3),并且编译器会选择更好的。

关于c++ - const 或 ref 或 const ref 或 value 作为 setter 函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31402796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com