我有这段简单的代码:
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
这对我来说毫无意义:(
答案 0 :(得分:4)
int& d[] = {a,b};
您无法创建引用数组。 C ++标准不允许这样做。为了允许它,必须重写整个类型机制。
int x = *c[0]+d[1];
给你一个错误,因为编译器无法确定d
的类型,因为你声明d
的前一行有一个编译错误。
B b[2];
创建两个B
类型的对象,因此调用B()
两次。
b[1]=D();
创建D
类型的对象。为此调用类本身的构造函数及其Base类,从而产生调用B()
和D()
。创建的对象存储在数组索引1
中。但是,由于数组的类型为B
Object Slicing ,因此会切断对象的所有派生成员。基本上,b[1]
处的对象现在属于B
b[1].print();
在对象类型print()
上调用B
方法(请参阅上面的说明,为什么类型为B
)
答案 1 :(得分:2)
第一部分见Als的回应。第二部分:
答案 2 :(得分:1)
问题#1
int& d[] = {a,b};
您无法创建引用数组。数组包含对象。实例,基元和指针是对象。参考文献不是。
问题#2,由于问题的变化,答案被删除了。