以下是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要引用论点?:) (开玩笑)
谢谢
发布于 2014-01-06 15:56:56
小而小的大小将因上下文而异。请注意,规则(1)只是对规则(2)的重写--如果对象很小且不想修改它,则按值传递而不是由const&传递。请注意,在此上下文中,对象的大小更多地与复制它的成本有关,而与sizeof的关系较小。在复制数据时复制兆字节的1字节对象不是一个小对象。
返回而不是修改可以严格地比通过引用修改更有效。不同的省略机制(包括NRVO和RVO)可以直接构建事物。您的代码还可以避免检查输入参数中的非空状态并清除它们。
规则4和规则1可以交互:如果要“获取”传入的内容的副本,即使对象很大,也应该在参数列表中而不是在函数的正文中进行复制。这几乎和执行多个完美重载一样有效(在最坏的情况下它还有一个额外的移动),只要您的move操作是有效的。
https://stackoverflow.com/questions/20953546
复制相似问题