c++ 编程问题-C++的,关于指向临时变量的引用?

问题描述

C++的,关于指向临时变量的引用?

int x = 1;
int y = 1;

const int & z= x + y;
int a = 1; // 没有作用,只是为了能在此处可以设置断点;
问题是:
1、如果没有const编译不过 ?
2、我们知道引用是“别名”,那么z指向的哪个变量,如果指向临时变量(x+y),那么运行到第四句之后,那么临时变量是不是也是释放掉了,这时候z指向什么呢?
3、在VS2010调试的结果是,在第四行设置断点,能看到 z = 2, 而且 &z = 0x002afc00地址也存在,想问问什么情况?

解决方案

1.对于 int &z = x+y,编译器报错:'initializing' : cannot convert from 'int' to 'int &',什么原因我也不知道
2.临时变量只在这个函数体有作用,运行到第四句后临时变量没有释放
3.个人认为是x+y会先产生一个临时变量,然后z是这个临时变量的引用,所以z是有值的

时间: 2024-09-29 06:03:45

c++ 编程问题-C++的,关于指向临时变量的引用?的相关文章

c++-C++引用变量问题,函数中临时变量返回引用

问题描述 C++引用变量问题,函数中临时变量返回引用 C++ primer plus第六版引用一节,说不能在函数中新建一个变量,并将其引用返回.道理我都懂,就是说函数调用完后,那部分临时内存会释放.可是为什么我自己写的下述代码不报错,反而能正常运行呢? #include using namespace std; struct free_throws //此处定义一个结构体 { int i; }; const free_throws & clone2(free_throws & ft1, f

编程习惯:你会把函数的形参赋值给函数内临时变量吗?

问题描述 编程习惯:你会把函数的形参赋值给函数内临时变量吗? 阅读代码时,常会发现有人把函数的形参赋值给函数内临时变量,然后对这个临时变量操作,如下面的例子: int func(int i) { int temp=i; printf("%dn", temp++); return temp; } 和直接操作形参有什么区别呢?(如下) int func(int i) { printf("%dn", i++); return i; } 请大神指点--

关于将临时变量置为null是否有助于快速垃圾回收

"将不再使用的临时变量立即置为null是否有助于垃圾回收"的话题好像有不少人争论过. 首先,我们要理解GC回收垃圾数据的标准是通过路径检查,看是否还有引用指向某个对象.如果不再有引用指向这个待回收的对象,那么GC会将其放入待回收队列.从这个理论上来说,适时将不再使用的变量置为null是有助于垃圾回收的.但是,进一步理解GC的工作模式,我们会发现如下几个问题. 1. GC只是将其置于待回收队列,并不一定立即回收(需要一定的条件).2. GC并不会在变量置为null时启动回收动作. 所以只

《从缺陷中学习C/C++》——6.13 临时变量内存不能返回

6.13 临时变量内存不能返回 从缺陷中学习C/C++ 代码示例 char *initialize() { char str[300]; char* ptr = str; return ptr; } void useMyStr(char * str){ char tmp[300] = "123"; printf("%s\n", tmp); printf("%s\n", str); } int main() { char *myStr = init

算法研究之不使用临时变量实现两个值的交换

变量值的交换经常在程序中使用,一般方法是使用一个临时变量,交换两个数的值,其实,不使用临时变量,依然可以实现这一功能. 1.常规交换方法 int a,b,temp; temp=a; a=b; b=temp; 2.通过指针 1: inline void Swap(int *a,int *b) 2: { 3: *a=*a+*b; 4: *b=*a-*b; 5: *a=*a-*b; 6: } 两个人交换苹果和桔子但是每人只有一个手,也不借助其它的容器,那如何进行呢,有办法,就只是用一个手拿两样东西,也

objective c-利用临时变量在两个ViewController之间传值

问题描述 利用临时变量在两个ViewController之间传值 临时变量eneity,如有两个ViewController,OneViewController,SecondViewController两个ViewController,跳转正常,从OneViewController利用临时变量eneity发送值到SecondViewController,但是SecondViewController和回传值,利用eneity,OneViewController却得不到,在不用代理的情况下,是否可以

c语言中,一个已定义的指针变量被置空后是如何"记得"它以前所指向的变量的类型的?

问题描述 c语言中,一个已定义的指针变量被置空后是如何"记得"它以前所指向的变量的类型的? 如题,比如定义了一个整型的指针p指向整型变量a : int *p = &a ; 然后将p置空:p = null; 这个时候指针p中所存放的数据即地址已经被清空了,但是再次http://ask.csdn.net/#使用p时还是只能 将其指向整型类型的变量,而不能指向其他类型的变量(比如字符型变量),那么p是 怎么"记得"它在被定义时候的类型的?它的值不是已经被清零了吗?

scalar-SQL @list临时变量 ,报错信息必须定义变量

问题描述 SQL @list临时变量 ,报错信息必须定义变量 declare @list table ( Id int, Name navarchar(12) ) insert into @list select * from tableA select * from @list --到这步都是OK的,能得到@list中的数据 --下面我想把@list与tableB表联接起来做查询 select * from @list,tableB where @list.id = tableB.id 结果报

指向变量的常指针与指向常变量的指针详细解析_C 语言

常(量)指针常指针就是我们说的指向常量的指针,顾名思义,它是用来指向常量的. 用常指针指向常变量实际上,C++规定只能用指向常变量的指针指向常变量,普通指针指向它就会报错,原因也很容易理解,我们用普通指针指向常变量之后,有可能就会进行改变常变量数值的操作,这样做是不被允许的. 常指针的定义方法: 复制代码 代码如下: const 类型名  * 常指针名; 下面是它的一个简单的使用示例:程序1.1.1 复制代码 代码如下: #include<iostream>using namespace st