我有这段简单的代码:
int a = 1, b = 2;
int* c[] = {&a,&b};
int& d[] = {a,b};
int x = *c[0]+d[1];
如果以下工作
int &d = a;
我不明白为什么第 3 行和第 4 行会产生错误。:-s
这对我来说真的没有意义:(
int& d[] = {a,b};
您不能创建引用数组。C++ 标准不允许它。为了允许它,必须重写整个类型机制。
int x = *c[0]+d[1];
给您一个错误,因为编译器无法确定 的类型d
,因为在您声明的上一行存在编译错误d
。
B b[2];
创建两个类型的对象,B
因此调用B()
两次。
b[1]=D();
创建一个 类型的对象D
。为此它调用类本身及其基类的构造函数,从而导致调用B()
和D()
. 创建的对象存储在数组索引处1
。然而,由于数组的类型是B
对象切片,因此对象的所有派生成员都被切片。本质上,b[1]
现在的对象是类型B
b[1].print();
调用print()
对象类型的方法B
(参见上面的解释为什么它是类型B
)
对于第一部分,请参阅 Als 的回复。第二部分:
问题 #1
int& d[] = {a,b};
你不能做一个引用数组。数组包含对象。实例、原语和指针都是对象。参考不是。
问题#2,由于问题的变化而省略了答案。