C 中的引用数组:用标准引用解释
考虑以下代码:
int a = 1, b = 2, c = 3; int& arr[] = {a,b,c,8};
此代码不编译。为什么?让我们探索 C 标准来寻找答案。
C 标准指南
根据 C 标准 §8.3.2/4:
"不应有对引用的引用,不应有引用数组,也不应有指向引用。”
限制背后的原因
之所以存在此限制,是因为引用不是传统意义上的对象。它们本质上是对象的别名,不占用内存,因此它们没有地址。因此,声明引用数组没有什么意义,因为没有要引用的对象数组。
替代方法
如果需要模拟引用数组,您可以创建一个封装引用的类,如下例所示:
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; cintref arr[] = {a,b,c,8}; }
这种方法本质上模拟了一个数组通过创建 cintref 类的对象数组来引用。每个对象都保存对相应整型变量的引用。
以上是为什么不能在 C 中声明引用数组?的详细内容。更多信息请关注PHP中文网其他相关文章!