我有这段简单的代码:
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
,因此会Object Slicing,并且将对象的所有派生成员切成薄片。本质上,b[1]
处的对象现在为B
类型b[1].print();
在对象类型
print()
上调用B
方法(请参见上面的说明,为什么它是类型B
)关于c++ - 指针和引用棘手的代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11244185/