首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

引用有关问题

2012-02-28 
引用问题求助!我在C++编程思想里看到下面一段话:创建一个引用时,引用必须被初始化指向一个存在的对象,但也

引用问题求助!
我在C++编程思想里看到下面一段话:
创建一个引用时,引用必须被初始化指向一个存在的对象,但也可以这样写:
      int   &q   =   12
这里,编译器分派了一个存储单元,它的值被初始化12,这样,这个引用就和这个存储单元联系上了。

问题:

但是,我在编译的时候怎么不通过呢?

.net的提示
c:\TC7\tttt.cpp(102):   error   C2440:“初始化”:   无法从“int”转换为int   &”


求高手指点迷津!!


[解决办法]
int &q = 12 ?
你的这个12存放在那里呢? 有地址么?
int x=12;
int&q = x;这样
[解决办法]
是const int & q = 12;吧
[解决办法]
同意LS。这个临时变量 '12 '是不能修改的。
[解决办法]
是的,一般情况下,如果你想用引用,很多情况下是想实现对引用对象的修改,但是int & q = 12, 12的地址未知,无法对q的引用对象进行操作。
[解决办法]
如果一定要修改12这个值,可以这样做:

const int & q = 12;
int &p = const_cast <int &> (q);
p = 10;
// 此时q引用的int是10。

在我的编译器上, '12 '是在栈中分配的(可以&q获得它的地址,并与上下文中的局部变量地址做比较,可知它确实在栈中)。因此,上述代码没有任何问题。但是,不能认为上述代码就是安全的。因为C++标准规定‘12’是不能修改的,这意味着编译器可以自行决定 '12 '的生成方式。例如,在有些计算机中,有常量内存,如果编译器从那里生成 '12 ',那么上述代码可能造成严重的系统错误,甚至使程序崩溃。

因为,严格遵照标准办事,才能获得比较好的移植性。

热点排行