想要速度吗?按值传递:性能注意事项
“想要速度?按值传递”的原则表明,按值传递参数有时可以由于复制省略而提高性能。为了说明这一点,请考虑以下使用类 X 和 Y 的代码:
<code class="cpp">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()); }</code>
这里,foo() 返回一个传递给 X 和 Y 构造函数的临时字符串。当 X 初始化 mem_name 时,它会调用 std::string 的移动构造函数,这可能会避免复制字符串。但是,当 Y 初始化 mem_name 时,它必须复制字符串引用。
左值与右值参数:
如果传递左值(非临时),则 X Y 将执行复制。此外,X 将执行一个动作。对于右值(临时值),X 只能执行移动,而 Y 仍必须执行复制。
性能影响:
通常,移动比传递更快指针(相当于通过引用传递)。因此,X 的左值性能与 Y 相似,而右值性能更好。
注意:
虽然“想要速度?按值传递”是一个引人注目的想法,应当谨慎地应用它。必须考虑与复制大型数据结构相关的特定上下文和潜在开销。建议进行分析以确定实际的性能影响。
其他资源:
以上是想要速度吗?按价值传递:复制消除总是性能赢家吗?的详细内容。更多信息请关注PHP中文网其他相关文章!