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

【新手】关于临时变量

2013-12-19 
【新手求助】关于临时变量#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存在

热点排行