以下代码无法编译。
int a = 1, b = 2, c = 3;
int& arr[] = {a,b,c,8};
C ++标准对此有何说法?
我知道我可以声明一个包含引用的类,然后创建该类的数组,如下所示。但是我真的很想知道为什么上面的代码无法编译。
struct cintref
{
cintref(const int & ref) : ref(ref) {}
operator const int &() { return ref; }
private:
const int & ref;
void operator=(const cintref &);
};
int main()
{
int a=1,b=2,c=3;
//typedef const int & cintref;
cintref arr[] = {a,b,c,8};
}
可以使用struct cintref
代替const int &
模拟引用数组。
intlink value = 8;
确实有效。检查您是否不相信。
operator=
。引用不能重新设置。如果您确实想要这样的语义-尽管我个人还没有发现它们实际上有用的情况-那么std::reference_wrapper
将是这样做的方法,因为它实际上存储了一个指针但提供了类似引用operator
的,并且确实允许重新定位。但是然后我只用一个指针!