首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Stroustrup函数中传递参数的指南

Stroustrup函数中传递参数的指南
EN

Stack Overflow用户
提问于 2014-01-06 15:41:41
回答 1查看 914关注 0票数 4

以下是Stroustrup在他最新的C++书中给出的在函数中传递参数的指导原则:

代码语言:javascript
复制
[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要引用论点?:) (开玩笑)

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-06 15:56:56

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

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

规则4和规则1可以交互:如果要“获取”传入的内容的副本,即使对象很大,也应该在参数列表中而不是在函数的正文中进行复制。这几乎和执行多个完美重载一样有效(在最坏的情况下它还有一个额外的移动),只要您的move操作是有效的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20953546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档