我想做点什么
int &a = *(new int[10]);
// access all the indices from this reference somehow.
我能做的就是,
int *b = &a;
b[1] = 10;
我可以使用参考吗?如果不是,为什么?
答案 0 :(得分:3)
您必须使用指针,因为C ++中的数组索引运算符仅针对指针(以及重载该运算符的用户定义类)定义。但是指针可以只是暂时的:
(&a)[1] = 10;
如果您想避免使用指针,那么您只需使用std::array
或std::vector
代替:
std::array<int, 10> a;
a[1] = 10;
std::vector<int> v(n);
v[1] = 10;
答案 1 :(得分:1)
是的,你当然可以这样做,但它与谷物相反:预期参考不会用于获取数组的其他元素,而是引用元素。请不要。
答案 2 :(得分:1)
您可以使用参考:
int (&a)[10] = (int (&)[10])*new int[10];
那就是说,你仍然需要删除[]&amp; a,如果你知道数组大小并且它不是很大,你可以创建一个普通的基于堆栈的数组。您无法创建对未知/运行时确定长度的数组的引用。鉴于你也可以索引指针,这是非常有限的实际用途(主要是为了将数组传递给自己绑定对它的引用的模板,通常它们可以隐式访问数组大小)。