呵呵,,又引申出问题了!
/images/2011/147787/2011051411021524.jpg" border="0" />
[此贴子已经被作者于2007-6-17 23:54:31编辑过]
谢谢!还有点疑惑,就算是临时变量,那怎么又可以进行解引用操作呢?
并且我发先,产生错误的操作是因为程序想修改a++返回的值,比如我可以 (a++)+1,*a++,这些都是允许的。
以你的说法,好象有点矛盾,也不知道是不是我理解错你意思了。
还有,你说“如果允许程序用指针指过去,销毁后再用指针访问这段内存很可能出错”
但是
int a[] = {10,100};
int *pi = a;
int *pi2 = pi++;
cout << &pi2 << endl;
没有错误。说明pi2可以保存pi++返回的临时值啊!
顺便,请教一下,这个 临时变量 怎么用代码实现,我们写函数可以有这样的返回吗?
我也想一次弄清楚,麻烦你耐心点哦!
呵呵呵~
谢谢!还有点疑惑,就算是临时变量,那怎么又可以进行解引用操作呢?
并且我发先,产生错误的操作是因为程序想修改a++返回的值,比如我可以 (a++)+1,*a++,这些都是允许的。
以你的说法,好象有点矛盾,也不知道是不是我理解错你意思了。
还有,你说“如果允许程序用指针指过去,销毁后再用指针访问这段内存很可能出错”
但是
int a[] = {10,100};
int *pi = a;
int *pi2 = pi++;
cout << &pi2 << endl;
没有错误。说明pi2可以保存pi++返回的临时值啊!
顺便,请教一下,这个 临时变量 怎么用代码实现,我们写函数可以有这样的返回吗?
我也想一次弄清楚,麻烦你耐心点哦!
呵呵呵~
这里的pi++返回了一个临时对象,但是pi2=pi++只是接受了临时变量的值,并没有用指针指向临时变量.你要注意这里哪个是临时变量.我强调的是不能用指针指向临时对象,而接受临时对象的值完全是正常操作.你举的例子是接受临时对象的值.
还是43楼我说的临时对象在返回之后会编译器会调用destructor销毁临时变量,所以不能取临时变量地址.
我觉得你还是没有明白接受了临时变量的值 和 取临时变量地址 的区别,临时变量名字中临时的就是它的生命周期短,在返回后就结束了,你还要看清楚什么时候创建,什么时候结束这个问题.