社区
C++ 语言
帖子详情
什么是临时对象(变量),它是怎样产生的,它的生命周期怎样?
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
打赏
收藏
什么是临时对象(变量),它是怎样产生的,它的生命周期怎样?
1. 创建常量的引用,将产生一个临时变量.如: const int i=5; const int &ri=i; 2. 当初始化引用的变量类型与声明的引用类型不一致时,也会产生临时变量: int i=5; double &rd=i; 3. 函数以值的形式返回时,也会产生临时变量(对象)etc. 还有在其他情况下产生临时对象(变量)的情况吗? 哪位能详细给出实例讲讲它们产生的机制,和生命周期情况。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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部分
C#特性 匿名类型与隐式类型局部
变量
使用介绍
在C#里有这样一些类型,它是作为临时储存数据的,
生命
周期
只在这个方法内,方法结束了,这个类型的
生命
周期
也没有了。那么这里我们就可以使用一个匿名类型。 代码如下: var KeyPair = new {Key=”yuyi”,Value=”...
临时
变量
生命
期
有关临时
对象
的
生命
周期
有三种情况: 一般情况:临时性
对象
的被摧毁,应该是对完整表达式(full-expression)求值过程中的最后一个步骤。该完整表达式造成临时
对象
的
产生
。 以及两个特殊情况 凡含有表达式执行...
C++
对象
模型9——临时
对象
的
生命
周期
、模板及实例化分析、内联函数
一、临时
对象
的
生命
周期
T c=a+b 假设T是一个类型,那么上述代码执行时,首先会
产生
一个临时
对象
用来存放a+b的结果(拷贝初始化临时
对象
),然后用该临时
对象
拷贝初始化c,最后临时
对象
被释放。如果开启编译器...
C++临时
变量
的
生命
周期
(const 引用后延长临时
变量
周期
)
C++ 中的临时
变量
指的是那些由编译器根据需要在栈上
产生
的,没有名字的
变量
。主要的用途主要有两类: 1) 函数的返回值, 如: 1 string proc() 2 { 3 return string("abc"); 4 } 5 6 int main() 7 { ...
实例化,成员
变量
,临时
变量
有什么本质上的区别?
临时
变量
:临时
变量
是在方法、构造函数或代码块内部声明的
变量
,它们用于临时存储...每个实例都有自己的成员
变量
副本,它们在
对象
的
生命
周期
内保持状态。成员
变量
在类的方法之外声明,并可以通过类的实例引用进行访问。
C++ 语言
64,661
社区成员
250,488
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章