什么是临时对象(变量),它是怎样产生的,它的生命周期怎样?

caizhiyi123 2004-04-23 08:31:24
1. 创建常量的引用,将产生一个临时变量.如:
const int i=5;
const int &ri=i;
2. 当初始化引用的变量类型与声明的引用类型不一致时,也会产生临时变量:
int i=5;
double &rd=i;
3. 函数以值的形式返回时,也会产生临时变量(对象)etc.
还有在其他情况下产生临时对象(变量)的情况吗?
哪位能详细给出实例讲讲它们产生的机制,和生命周期情况。
...全文
204 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
iintsy 2004-04-23
  • 打赏
  • 举报
回复
我好像听说听说临时变量是放在栈中的,new出来的内存是放在堆中的,堆和栈不是同一个概念。
codelover 2004-04-23
  • 打赏
  • 举报
回复
临时变量是存储在数据区的比部分吗?
我用下面的例子看到它离数据区很近,离堆栈很远。

#include <iostream>
using namespace std;

char* a = "abcdefghijklmnopqrstuvwxyz";
static char *ptmp="Hello,world";

char b[]="123456789";
char c[]={'1', '2', '3', '4'};
void print(char str[]);

int main(int argc, char* argv[])
{
cout<<hex<<&a<<endl;
cout<<hex<<(int)a<<endl;
cout<<hex<<&b<<endl;
cout<<hex<<(int)b<<endl;
cout<<hex<<&c<<endl;
cout<<hex<<(int)c<<endl;
char d[]="abcd";
cout<<hex<<&d<<endl;
char* pstr=new char[100];
cout<<hex<<(int)pstr<<endl;

char* p1="Hello,world2";
cout<<hex<<&ptmp<<endl;
cout<<hex<<(int)ptmp<<endl;
cout<<hex<<&p1<<endl;
cout<<hex<<(int)p1<<endl;

print("Hello, world");
return 0;
}

void print(char str[])
{
cout<<str<<endl;
cout<<hex<<&str<<endl;
cout<<hex<<(int)str<<endl;
}
oldjackyone 2004-04-23
  • 打赏
  • 举报
回复
临时对象的生命期出现的C++伪代码如下:

int i=5;

{//开始
temp = static_cast<double>(i);
double rd=temp;
}//结束

3.函数以值的形式返回时,也会产生临时变量(对象)etc.
在函数return value;后,产生一个临时对象,当此临时对象赋给了另外对象后,那么临时对象的生命期也就节束.
sdhls 2004-04-23
  • 打赏
  • 举报
回复
实参与形参不一致时,若存在从实参到形参类型的转化渠道,也会产生临时变量
angelo23 2004-04-23
  • 打赏
  • 举报
回复
1. 创建常量的引用,将产生一个临时变量.如:
const int i=5;
const int &ri=i;
-------------------------------------------
这个地方没有临时对象的产生

2. 当初始化引用的变量类型与声明的引用类型不一致时,也会产生临时变量:
int i=5;
double &rd=i;
---------------------------
临时对象不能用于初始化一个非const引用,所以只能这样
int i = 5;
const double &rd = i;

3. 函数以值的形式返回时,也会产生临时变量(对象)etc.
-------------------------------------------
原则上是这样的,但是实际实现中可能在不改变语义的前提下省略掉

具体的请看Inside the C++ Object Model 的Runtime Semantics部分

64,661

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧