假设我写了以下代码
int i=10;
int &j=i; //a reference in C++,don't confuse it with pointers & address
j
是否会占用内存中的任何空间,因为它只是一个引用?
答案 0 :(得分:3)
您无法将非const
引用绑定到const
值。编译器应该给你一个错误:
从'const int'
类型的表达式初始化'int&'类型的引用
即使您确实解决了这个问题(例如,使用const_cast
),代码也会有未定义的行为,因为您正在修改原始的const
值。
我是否将内存中的任何空间仅仅作为参考?
这是一个实现细节 - 它可以完全优化。您需要知道的是j
只是i
的昵称。
答案 1 :(得分:0)
尝试将引用分配给常量值时出错 “错误C2440:'初始化':无法从'const int'转换为'int&'”
答案 2 :(得分:0)
首先,正如Luchian所说,你正在对&j
进行无效初始化。
引用只是赋予变量内存位置的名称。您可以通过原始变量名称或引用来访问变量的内容。您可以阅读以下声明:
int &j=i;
为:
j
是一个初始化为i
的整数引用。
嗯,他们的占用空间是依赖于实现的,不是它们存储在某个地方,你可以将它们视为标签。
来自C ++标准(§8.3.2#4)
未指定引用是否需要存储
重点是我的。
* 注意 - *引用通常用于函数参数列表和函数返回值。