|
|
1
10
通过隐式参数,您应该了解
跟随
他们不是。您将看到数组元素的更改,但数组(结构)不会更改。
因此,要改变
这样我们就可以同时改变内容和结构(并传回新的大小)。当然,我们只能用动态分配的数组来调用这个函数。
通常的解决方案是使用智能指针:
|
|
|
2
7
既然有那么多 误解和彻头彻尾的错误答案
正如其他人所说,第二个代码需要一个副本(通常调用
其他人已经回答了一些特殊的问题(例如运行时多态性)。这并不能解释为什么它已经成为最佳实践。原因很简单,也很难看:因为它是 效率更高。想象一下,将一个向量或字符串传递给另一个方法,或者基本上只是传递给任何大数据结构。复制这种方法的成本通常是巨大的,而且方法可能经常在代码中被调用事实上,方法是 经常调用,否则代码设计得很糟糕。
另一方面,当你把物体作为
我认为这本书错了。类的成员函数隐式地传递
数组在C++中很少被传递,它们通常作为指针传递:
实际上和
可以
但你又一次 明确地 |
|
|
3
4
不,这是错误的,这是一个普遍的误解。在C#、VB和Java等语言中,变量总是按值传递(异常显式传递为
与C++的区别在于变量不包含类对象本身,它们只包含引用。所以传递给方法的不是对象本身,而是它的引用(但是 按值传递)。 区别是相当重要的。如果使用C#通过引用传递,则以下代码将打印不同的结果:
|
|
|
4
4
因为从概念上讲,Foo的对象需要无限的空间。从技术上讲,Foo类型在Foo的定义中是不完整的。 您可能需要的是一个指向Foo作为成员的指针。 |
|
|
5
1
为了更好地解释#3,请考虑以下情况:
如果foo被称为
|
|
6
1
一次一个:
|
|
|
7
0
按常量引用而不是按值传递是不太被接受的“好做法”。
人们倾向于认为const引用更快,但事实是编译器在传递值时可以优化掉副本,因此传递值是一个很好的默认值(实际上,标准库通常会这样做)。例如,
不能 逻辑上可以复制。假设对象代表一个窗口。您不希望仅仅因为将window对象传递给另一个函数而在屏幕上显示第二个窗口,从而隐式地创建了一个副本。
通过引用传递的另一个原因(const或其他)可能是使用多态对象。假设你有一个基类
默认情况下 ,但通过常量引用当然也有它的位置。这两种语言都是有原因的。 |
|
8
0
实用主义上没有区别,const将阻止您更改'foo'的内容,而传递值也不会影响参数的内容,但是就有效性而言,const foo&foo更有效,因为当对象传递给方法时,它不会创建副本。 |
|
|
9
0
这
会被编译成这样的东西
|
|
|
10
0
从广义上讲,后者将 正在传递的参数(换句话说,它是原始Foo对象的副本)。前者将成为 浅拷贝 正在传递的参数(将其地址复制到不可变的常量引用,而不是复制实际的Foo对象)。 这两个版本都可以访问正在传递的Foo对象的成员。它们都不会修改调用者中的Foo对象。如果函数没有 需要 深度复制是指前者效率更高,因为它避免了深度复制的需要。
在参数化的一元构造函数(接受一个参数的构造函数)的上下文中,它们可以是隐式的(默认值)或显式的。
这是含蓄的。它允许我们编写如下代码:
虽然这是明确的:
... 也不会修改前一个代码。以前的代码必须相应地修改:
这通常是一个好习惯,使这样的构造函数显式,除了复制构造函数,我将不进入这里,因为这是相当复杂的。
我不太清楚这里要问什么,但是数组不能按值传递,如果这是您的意思的话。我们只能将引用/指针传递给数组:
这是无限递归的。Foo存储fInstance,fInstance存储另一个fInstance,依此类推。没有什么可以停止递归,所以您只需要让对象存储对象存储对象存储对象等等,直到内存用完为止。因此,编译器会检测到该条件并予以禁止,因为不会产生任何合法的运行时行为。也没有办法确定Foo的大小-那将是一个无穷大的值。 |
|
|
11
-1
传递对foo的引用,因此如果在函数中修改foo,则将修改原始foo。我希望这有道理。
|
|
|
12
-5
如果Foo是原始数据类型,DoSomething(Foo-Foo)按值传递对象Foo;如果Foo是用户定义的数据类型,则按引用传递对象Foo。但是在第二种情况下,如果您更改foo,它会反射回原始对象,这通常是不需要的。这是通过剂量测量来解决的(const Foo&foo)通过引用传递foo(从而节省了通过值传递的额外内存开销),并且仍然不向DoSomething函数提供对foo的写访问。因此,这是一种最佳做法。
成员函数中隐式参数的一个例子是对父对象的引用。
不,所有用户定义的对象都是通过引用传递的。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |