【新手】关于临时变量
【新手求助】关于临时变量#includequeueusing namespace stdqueue int myQueuevoid myFunc(){int a
【新手求助】关于临时变量
#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存在