|
|
1
17
这两个签名之间有两个很大的语义差异。
首先是使用
二是使用
|
|
|
2
8
第一种形式不创建对象的副本,它只是传递一个指向现有副本的引用(指针)。第二种形式创建副本,这可能很昂贵。这不是优化掉的东西:拥有对象的副本和拥有原始对象之间存在语义差异,复制需要调用类的复制构造函数。
|
|
|
3
8
有一个
还没有人提到的区别:对象切片。在某些情况下,您可能
需要
考虑另一个类
如果满足以下条件,这种行为差异(而非性能差异)可能很重要
|
|
|
4
4
编译器不会编译你的“意思”,它会编译你的 告诉它 编译器只适用于低级优化和程序员忽略的问题(如for循环内的计算、死代码等)。 在第二个例子中,你告诉编译器要做的是复制类——它会不假思索地这样做——即使你没有使用它,这也是你要求编译器做的。
|
|
|
5
4
以下是一些参数声明之间的差异: copied out modifiable func(Class value) Y N Y func(const Class value) Y N N func(Class &value) N Y Y func(const Class &value) N N N 哪里:
那么,两者之间的差异
|
|
|
6
1
如果你使用前者,然后尝试改变
如果你使用后者,然后尝试改变
因此,前者更容易发现错误。 |
|
|
7
1
|
|
|
8
1
优化编译器无法为您处理此问题的原因是单独编译的问题。在C++中,当编译器为调用者生成代码时,它可能无法访问函数本身的代码。据我所知,最常见的调用约定通常是调用者调用复制构造函数,这意味着如果不需要,函数本身的编译就不可能阻止复制构造函数。 |
|
|
9
0
最好按值传递参数的唯一一次是在无论如何都要复制参数的时候。
在这种情况下,如果值参数是常规对象,则第二个示例的速度与第一个示例相同,但如果值参数为R值,则速度更快。
Want Speed? Pass by Value. 我无法给出更好的解释。 |
|
|
metrallador10 · 哪种代码更好?效率与代码可读性 2 年前 |
|
|
Justin Xu · 使用return if语句进行重构验证 3 年前 |
|
|
Cino · 如何以体面的方式处理Python异常? 3 年前 |
|
|
SAI BENDE · 如何在多个html文件中使用单个导航栏 3 年前 |
|
|
fstab · 对正常控制流程使用例外情况是一种不鼓励还是不鼓励的做法? 13 年前 |
|
|
SwampYeti · 在CSS中拉伸小背景图像 13 年前 |