我有这段简单的代码:

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/

10-13 09:09