金庆的专栏
C++博客
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
423 随笔 :: 0 文章 :: 454 评论 :: 0 Trackbacks
公告
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(11)
给我留言
查看公开留言
查看私人留言
随笔分类
(502)
1. C/C++(166)
(rss)
2. 网游开发(108)
(rss)
3. Golang(20)
(rss)
4. Linux/Unix(30)
(rss)
5. 软工与管理(44)
(rss)
6. Python(23)
(rss)
7. Erlang(18)
(rss)
8. Rust(16)
(rss)
9. 其它(77)
(rss)
随笔档案
(423)
2023年1月 (1)
2022年11月 (1)
2022年10月 (2)
2022年9月 (1)
2022年4月 (6)
2022年1月 (2)
2021年12月 (4)
2021年11月 (6)
2021年10月 (2)
2021年9月 (2)
2021年8月 (7)
2021年7月 (2)
2021年5月 (2)
2021年3月 (1)
2021年2月 (2)
2021年1月 (1)
2020年12月 (1)
2020年10月 (1)
2020年9月 (5)
2020年8月 (1)
2020年7月 (1)
2020年6月 (1)
2020年4月 (2)
2020年3月 (3)
2020年2月 (3)
2020年1月 (1)
2019年12月 (1)
2019年9月 (2)
2019年4月 (2)
2019年1月 (1)
2018年12月 (1)
2018年11月 (3)
2018年10月 (1)
2018年9月 (3)
2018年8月 (3)
2018年7月 (2)
2018年6月 (4)
2018年5月 (4)
2018年4月 (4)
2018年3月 (1)
2018年1月 (2)
2017年12月 (2)
2017年11月 (3)
2017年10月 (3)
2017年8月 (7)
2017年7月 (1)
2017年6月 (1)
2017年5月 (3)
2017年4月 (3)
2017年3月 (3)
2017年2月 (2)
2017年1月 (2)
2016年12月 (5)
2016年11月 (2)
2016年10月 (2)
2016年9月 (1)
2016年8月 (6)
2016年7月 (3)
2016年6月 (2)
2016年5月 (4)
2016年4月 (2)
2016年3月 (2)
2016年1月 (3)
2015年12月 (2)
2015年11月 (2)
2015年10月 (1)
2015年8月 (2)
2015年7月 (1)
2015年6月 (1)
2015年5月 (4)
2015年4月 (3)
2015年3月 (4)
2015年2月 (5)
2015年1月 (4)
2014年12月 (3)
2014年11月 (3)
2014年10月 (2)
2014年9月 (3)
2014年8月 (1)
2014年4月 (4)
2014年3月 (1)
2014年2月 (4)
2014年1月 (5)
2013年12月 (5)
2013年11月 (5)
2013年9月 (2)
2013年8月 (2)
2013年7月 (2)
2013年6月 (2)
2013年5月 (1)
2013年1月 (2)
2012年12月 (1)
2012年11月 (1)
2012年9月 (1)
2012年8月 (3)
2012年7月 (2)
2012年6月 (1)
2012年4月 (3)
2012年3月 (2)
2012年2月 (3)
2012年1月 (2)
2011年11月 (2)
2011年10月 (3)
2011年9月 (2)
2011年8月 (2)
2011年7月 (3)
2011年6月 (2)
2011年5月 (3)
2011年1月 (2)
2010年12月 (1)
2010年11月 (2)
2010年10月 (2)
2010年9月 (3)
2010年8月 (2)
2010年7月 (3)
2010年6月 (1)
2010年5月 (3)
2010年4月 (3)
2010年3月 (5)
2010年2月 (4)
2010年1月 (4)
2009年12月 (2)
2009年11月 (3)
2009年10月 (4)
2009年9月 (3)
2009年8月 (2)
2009年7月 (4)
2009年6月 (1)
2009年5月 (3)
2009年4月 (4)
2009年3月 (2)
2009年2月 (5)
2009年1月 (1)
2008年12月 (7)
2008年11月 (4)
2008年10月 (1)
2008年9月 (3)
2008年8月 (4)
2008年7月 (3)
2008年6月 (4)
2008年5月 (6)
2008年4月 (7)
2008年3月 (6)
2008年1月 (5)
2007年12月 (7)
2007年11月 (4)
2007年10月 (5)
2007年9月 (6)
2007年8月 (8)
2007年7月 (5)
相册
公告照片
搜索
积分与排名
积分 - 648212
排名 - 25
最新评论
1. re: boost::asio::spawn 将一统C++网络库
asio 成为C++首选网络库
--linda
2. re: log4cxx中文输出错误补丁
评论内容较长,点击标题查看
--金庆
3. re: mingw编译OrzNet
能发送一个mingw编译好的OrzNet库给我吗? liuweiqcxy@163.com
谢谢!
--刘威
4. re: log4cxx中文输出错误补丁
评论内容较长,点击标题查看
--bigbad
5. re: log4cxx中文输出错误补丁
评论内容较长,点击标题查看
--bigbad
阅读排行榜
1. "multiple definition of" 错误(10959)
2. SVN中邪恶的replace(10888)
3. VS2005编译libevent(10390)
4. 混音算法的学习与研究(10107)
5. C调用lua脚本的效率测试(8985)
评论排行榜
1. VC6正在被抛弃(35)
2. VS2005编译libevent(21)
3. "multiple definition of" 错误(18)
4. C++引用优于指针(17)
5. ACE与ASIO之间关于Socket编程的比较(16)
对临时变量的引用
以下代码来自《Imperfect C++》
#include
<
stdio.h
>
int
main()
{
long
l
=
2222
;
short
const
&
s
=
l;
l
=
0
;
printf(
"
%ld, %d\n
"
, l, s);
return
0
;
}
输出是0, 2222还是0, 0?
按C++标准,引用s所指向的不是l,而是一个临时变量,所以输出应该是0, 2222。
posted on 2008-01-10 11:36
金庆
阅读(1738)
评论(11)
编辑
收藏
引用
所属分类:
1. C/C++
评论
#
re: 对临时变量的引用
2008-01-10 14:07
<a href=http://minidx.com>minidxer</a>
这个你要注意的应该是const,而不是引用
改成
short const s = l;
输出的结果同样应该是0, 2222
回复
更多评论
#
re: 对临时变量的引用
2008-01-10 14:17
<a href=http://minidx.com>minidxer</a>
另外金大虾如果可以对临时变量的生存周期做一下分析的话,那将会使很多人受益~
回复
更多评论
#
re: 对临时变量的引用
2008-01-10 14:48
金庆
@<a href=
http://minidx.com>minidxer</a>
对临时变量的引用必须是const
如short & s = l;就会编译报错。
该临时变量在其定义的作用域内有效。
回复
更多评论
#
re: 对临时变量的引用
2008-01-10 15:11
<a href=http://minidx.com>minidxer</a>
呵呵,
★这样呢?
int main()
{
long l = 2222;
short *s = (short *)&l;
l = 0;
printf("%ld, %d\n", l, *s);
return 0;
}
★或者这样呢?
int main()
{
long l = 2222;
const short *s = (short *)&l;
l = 0;
printf("%ld, %d\n", l, *s);
return 0;
}
★下面结论对吗?
●const与生命周期无关
●const引用与生命周期有关
●const的引用会改变临时变量的生命周期
★问题:
●程序员能不能操作临时变量?
●临时变量被释放有固定时间点吗?
●临时性对象被绑定reference,那又会有什么不同?
回复
更多评论
#
re: 对临时变量的引用
2008-01-11 10:07
金庆
@<a href=
http://minidx.com>minidxer</a>
minidxer想要引发我们对临时变量的思考。(或者是搅乱我们原来的认识?)
上述3个结论是正确的,只是第一个表述成这样更清晰:
const量与所赋值的生命周期无关
或者
const量与其他变量的生命周期无关
回答问题:
1. 无法操作临时变量
2. 临时变量会立即释放
3. 临时对量被引用后,不再临时
(再深入讨论可能会吓跑大批想学或正在学C++的朋友!)
回复
更多评论
#
re: 对临时变量的引用
2008-01-11 10:44
<a href=http://minidx.com>minidxer</a>
呵呵,只是想借这篇文章展开一下,平时可能很少会去认真思考这些问题,本来还想在深入一些,不过看来只能到此为止了。:)
const只是一个编译期的概念,其实很多相关的东西都是和编译器有关的。
另外,
●临时变量是可以操作的,包括延长该变量的生命周期
●临时变量的释放和编译器有关,不一定马上释放
回复
更多评论
#
re: 对临时变量的引用
2008-01-29 12:57
eXile
在这个例子中,s所引用的临时变量的生命期和s的生命期是一致的。
回复
更多评论
#
re: 对临时变量的引用[未登录]
2008-08-27 15:38
raof01
@<a href=
http://minidx.com>minidxer</a>
临时变量是可以操作的
如:
int main()
{
long l = 2222;
char const &s = l;
int *p = reinterpret_cast<int*>(const_cast<char *>(&s));
*p = 88;
printf("%ld, %c\n", l, s);
return 0;
}
回复
更多评论
#
re: 对临时变量的引用[未登录]
2008-08-27 15:39
raof01
能否操作临时变量,就看你有没有办法获取他的地址。
回复
更多评论
#
re: 对临时变量的引用
2009-01-05 11:29
hying
&s指向的不是L,而是L经过类型转换后的一个值。这时候已经和L无关了。所以L变成0的时候&s还是指向2222。
回复
更多评论
#
re: 对临时变量的引用[未登录]
2009-09-02 11:21
name
大家试没试过
int main()
{
long l = 2222;
long const &s = l;
l = 0;
printf("%ld, %d\n", l, s);
return 0;
}
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
How are dtLinks created in NavMesh
C++ parameter passing rules
Naming Conventions for Accessors
Visual Studio 2019 Compiler Hangs
Fbx File Format Identifier
查找内存错误
std::thread 中的异常会丢失调用栈
用赋值代替 protobuf CopyFrom()
vs2017 linux 编译输出改成 vs 格式
为 LiteIDE 添加选中标记
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
Powered by:
C++博客
Copyright © 金庆