|
|
1
6
|
|
|
2
7
这里有两件事,你好像把它们搞混了: 1) 如果目标类型是抽象类,并且通过值传递,则不会出现运行时错误:它不会编译,句点。 2) 如果目标类型是具体的但具有派生类,则会出现运行时错误。举个例子:
它编译得很好,但是输出
实际上,我避免按值传递任何参数,除非我确定它是一个基元类型,如
|
|
|
3
3
它甚至不会编译。。 来自标准文档 10.4.3条 ,
|
|
|
4
1
好吧,假设我们有以下层次结构
如果有一个按值取基的函数,而传递的是Derived,则派生对象首先转换为Base(通过截断任何特定的fo派生信息,如DerivedNum),然后复制到参数中。因此,在函数中,您将丢失特定于派生的任何信息。这就是所谓的切片。在函数内部,如果调用了virtual f()函数,则无论传递的是派生的,都将调用Base::f。 如果通过引用或指针传递,则不会进行复制。从派生类型转换为基类型将保留动态类型信息,因为没有实际的复制,因此将执行切片。当然,不能将基用作派生,但如果调用f,则会调用派生::f。 哦。 |
|
|
5
0
我怀疑按值传递派生类实例是否可能。毕竟,在编译时必须知道传递值的大小。然而,抽象基类和派生类的大小可能(而且很可能)不同。由此产生的行为几乎没有定义。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |