读书人

【新手】关于临时变量

发布时间: 2013-12-19 00:33:34 作者: rapoo

【新手求助】关于临时变量


#include<queue>

using namespace std;

queue< int > myQueue;

void myFunc()
{
int a = 250;
myQueue.push( a );
}

int main()
{
myFunc();
cout << myQueue.front() <<endl;

return 0;
}


运行结果:250

问题:临时变量a,不是在myFunc返回后被销毁,怎么还会在队列里面存在呢?
备注:标准库队列push函数的原型void push( const TYPE &val );

[解决办法]
int a 它是被销毁了!但是值250拷贝存储进去了!
[解决办法]
myQueue.push( a );
传的是值,不是指针. 实际上已经复制了一个copy
[解决办法]
看你写出了push函数的声明大概明白你的意思了,你知道没有复制对象a
但是队列容器中是有与a分离的存储空间的,所以调用push函数时,虽然没有复制对象a,但是这个过程中
myQueue对象中引用a的值创建了一个int对象作为队列的元素,此时尽管对象a被销毁了,myQueue中的那个元素不会受到影响
[解决办法]
函数声明传递的的确是引用,但是在队列内部会把它存起来,
建议lz看一看队列的实现
[解决办法]
中间发生了一次拷贝,拷贝a的值放进queue里
[解决办法]
类似于:
定义a
定义b=a
销毁a。

此时,b存在

读书人网 >C++

热点推荐