C ++中的引用及其内存要求

时间:2013-07-25 09:14:14

标签: c++ pointers memory-management

假设我写了以下代码

int i=10;
int &j=i; //a reference in C++,don't confuse it with pointers & address

j是否会占用内存中的任何空间,因为它只是一个引用?

3 个答案:

答案 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)

     

未指定引用是否需要存储

重点是我的。

* 注意 - *引用通常用于函数参数列表和函数返回值。