想要速度?按值传递:性能注意事项
“想要速度?按值传递”的原则表明,按值传递参数有时可以由于复制省略而提高性能。为了说明这一点,请考虑以下使用类 X 和 Y 的代码:
struct X {
std::string mem_name;
X(std::string name) : mem_name(std::move(name)) {}
};
struct Y {
std::string mem_name;
Y(const std::string &name) : mem_name(name) {}
};
int main() {
X(foo());
Y(foo());
}
这里,foo() 返回一个临时字符串,该字符串被传递给 X 和 Y 构造函数。当 X 初始化 mem_name 时,它会调用 std::string 的移动构造函数,这可能会避免复制字符串。但是,当 Y 初始化 mem_name 时,它必须复制字符串引用。
左值与右值参数:
如果传递左值(非临时),则 X Y 将执行复制。此外,X 将执行一个动作。对于右值(临时值),X 只能执行移动,而 Y 仍必须执行复制。
性能影响:
一般来说,移动比传递更快指针(相当于通过引用传递)。因此,X 对于左值具有与 Y 类似的性能,对于右值具有更好的性能。
注意:
虽然“想要速度?按值传递”是一个引人注目的想法,应当谨慎地应用它。必须考虑与复制大型数据结构相关的特定上下文和潜在开销。建议进行分析以确定实际的性能影响。
其他资源:
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3