gpt4 book ai didi

c++ - Stroustrup 关于在函数中传递参数的指南

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

这些是 Stroustrup 在他最新的 C++ 书中给出的指导方针在函数中传递参数:

[1] Use pass-by-value for small objects.
[2] Use pass-by-const-reference to pass large values that you don’t need to modify.
[3] Return a result as a return value rather than modifying an object through an argument.
[4] Use rvalue references to implement move (§3.3.2, §17.5.2) and forwarding (§23.5.2.1).
[5] Pass a pointer if ‘‘no object’’ is a valid alternative (and represent ‘‘no object’’ by nullptr).
[6] Use pass-by-reference only if you have to.

我的问题:

1) 他没有解释 [1] 中的“小物体”是什么意思。该规则适用于内置类型,但我不确定用户定义的类型。用户定义的有多“小”类型必须是才能作为规则 [1] 传递?

2) 我认为规则 [3] 只是风格问题。我错了吗?

3) 我想知道为什么规则 [6]。为什么 Stroustrup 讨厌引用参数? :)(开玩笑)

谢谢

最佳答案

small 的大小会因上下文而异。请注意,规则 (1) 只是规则 (2) 的重写——如果您的对象很小,则按值而不是 const& 传递并且 你不想修改它。请注意,在此上下文中,对象的大小更多地与复制它的成本有关,而与 sizeof 的关系较小。一个 1 字节的对象在复制时复制了兆字节的数据,这不是一个小对象。

返回而不是修改比通过引用修改更有效。各种省略机制(包括 NRVO 和 RVO)可以导致事物被直接构造。您的代码还可以避免检查输入参数中的非空状态并清除它们。

规则 4 和 1 可以相互作用:如果你要“复制”你传入的内容,即使对象很大,你也应该经常在参数列表中而不是在对象的主体中进行复制功能。只要您的 move 操作有效,这几乎与执行多个完美重载一样有效(在最坏的情况下它有 1 个额外的移动)。

关于c++ - Stroustrup 关于在函数中传递参数的指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20953546/

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