- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这些是 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/
练习 13,来自 Stroustrup 的编程原则和使用 c++ 的实践的第 12 章。 A superellipse is a two-dimensional shape defined by th
在《编程:使用 C++ 的原理与实践》的第 5.10.1 章中,有一个“试试这个”练习,用于调试某个区域的错误输入。前置条件是长度和宽度的输入是否为 0 或负数,而后置条件是检查面积是否为 0 或负数
这些是 Stroustrup 在他最新的 C++ 书中给出的指导方针在函数中传递参数: [1] Use pass-by-value for small objects. [2] Use pass-by
在 Stroustrup 的 C++ 编程语言书(第 3 版)中,在数值章节中,他展示了以下代码片段: void f(valarray& d) { slice_array& v_even =
Stroustrup C++ 第 4 版第 197 页有以下示例,这些示例导致打印的字符流递增,直到 null 而不是 "abc"。问题:如何评估 ++*p? ++ 和 * 是相同的优先级和从右到左的
以下示例来自 Stroustrup C++ 4th Ed。第 519 页。这是我从 K&R C 和更早的 Stroustrup 书中的理解,即原始类型的局部自动变量 未定义或未知被初始化 .原始类型的
我正在使用 Stroustrup C++ 第 4 版第 1182 页的这个随机数示例。编译器在 auto 行报告错误。 ,说明 auto 不能与类的非静态成员一起使用。我对这种绑定(bind)的结果类
“没有匹配的成员函数push_back” 在 Bjarne 的原始版本中,C 的 vector 是这样写的 vector*> res; 但是这个 Value_type 模板不能正常工作所以我只是用 C
请引用B.Stroustrup的《TCPL》第4版41.2.2 Instruction Reordering部分,我抄录如下: To gain performance, compilers, opti
我在 YouTube 上看到了这个视频:https://www.youtube.com/watch?v=YQs6IC-vgmo其中 Bjarne 说最好使用 vector ,而不是链表。我无法掌握全部
在 C++ 之旅的第 83 页,Stroustrup 提供了以下正则表达式: R"((\ew+))" 书中没有任何地方定义\e,我在互联网上也找不到任何相关信息。\e 在正则表达式中代表什么? 最佳答
目前我正在阅读 Stroustrup Programming: Principles and Practice C++。我遇到了这个例子: typedef void (*Pfct0)(struct S
以下幻灯片来自 Bjarne Stroustrups 的演讲“C++ 的本质”: 我是否通过以下简单示例(值、原始指针、资源成员/子对象的智能指针)理解了他的技术?: 1. class foo{
我正在阅读 Bjarne Stroustrup “The C++ programming language” 一书,其中提到在变量定义中使用 auto 的原因之一是: The definition i
我决定自己学习 C++,我已经有了一些 Java 经验。 在 Bjarne Stroustrup 的书中他说: Prompt the user to enter the age of the reci
我正在查看 Straustrup 的 hash_map 实现。这将给出他如何实现的直觉 template, class EQ = equal_to, class A = allocator > cla
我正在使用 Stroustrup 的天鹅书。我在从 a 获取输出时遇到了问题 vector 。我遵循了 sec 的文本示例。 4.6.3 第 121 页。设法编译了源代码并能够执行它。后输入由空格分隔
在 Stroustrup 的书 Programming with C++ page 102 中,他使用 cin 读入 double 后跟 char,用于将厘米转换为英寸. 他使用的代码: cin >>
我正在阅读 Bjarne S 的 C++ 编程语言。 在第 77 页,第 4.8 节中,我发现了这一点: "枚举器可以用常量表达式初始化(§C.5) 的整数类型 (§4.1.1)。这枚举的范围包含向上
Stroustrup 提供了一个 Can_copy template .它是如何工作的? template struct Can_copy { static void constraints(
我是一名优秀的程序员,十分优秀!