C++ Primer学习 --- 关于初始化表达式"int ival=ival"

inssuc 2006-11-10 01:43:23
C++ Primer有描述如下:
"在对象的定义中,当对象的标识符在定义中出现后,对象名马上就是可见的,因此用对象初始化它自己是合法的,只是这样做不太明智.例如:
//合法,但不明智
int bizarre=bizarre;
"

我在VC6下写了下面的程序:

#include <iostream>
#include <string>
using namespace std;

void main()
{
int ival=ival;
int ival2=ival2;

cout<<ival<<endl;
cout<<ival2<<endl;
}

结果为:
-858993460
-858993460

我想问的问题是,用int ival=ival这个表达式初始化ival时,究竟是什么值被付给ival了? -858993460是从哪里来的?
...全文
354 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
inssuc 2006-11-10
  • 打赏
  • 举报
回复
好像有点清楚了, 结贴
mLee79 2006-11-10
  • 打赏
  • 举报
回复
-858993460 == 0xcccccccc , DBG 版下 M$VC 会将所有的局部变量, malloc 分配的内存初始化为 0xcc , 便于查错 ....

int ival=ival; 在 RLS 版下会被优化掉地, 咔咔 ....
shootingsyh 2006-11-10
  • 打赏
  • 举报
回复
那个值不是随机出来的,应该叫作未定义更为合适,虽然在某些编译器下面他是一个固定的值。
不过要清楚的是这个值绝对不是随机出来的,而是有编译器,操作系统和当时的环境决定的一个值,你可以试试在vc下那个值永远都相同,但是在别的编译器下,别的操作系统下却都不一定了。未定义表明它是不确定的,是什么都有可能。而随机值则是定义良好的一种值,这二者不可以画等号
hailongchang 2006-11-10
  • 打赏
  • 举报
回复
大鹏说的对,请看汇编结果

; Line 7
mov eax, DWORD PTR _ival$[ebp]
mov DWORD PTR _ival$[ebp], eax
; Line 8
mov ecx, DWORD PTR _ival2$[ebp]
mov DWORD PTR _ival2$[ebp], ecx
lann64 2006-11-10
  • 打赏
  • 举报
回复
我也估计是个随机的值,所以在写程序时就特地多定义了一个ival2,结果和ival1却是相同的,有点不明白为什么编译器会把同一个随机数付给两个完全没关系的变量,这样的处理方式感觉不太舒服
---------------------------------
不一定是一样的,在你的系统一样在其他系统不一定一样。在这个编译器一样,在那个编译器不一定一样。反正标准说未初始化的变量是随机值,那它是多少,一样或不一样都可能。
huhai17 2006-11-10
  • 打赏
  • 举报
回复
因为没有初始化的值,编译器不知道这个值是多少,就随机出一个值
hailongchang 2006-11-10
  • 打赏
  • 举报
回复
局部变量不给0,只有未初始化的全局变量才给0
inssuc 2006-11-10
  • 打赏
  • 举报
回复
我也估计是个随机的值,所以在写程序时就特地多定义了一个ival2,结果和ival1却是相同的,有点不明白为什么编译器会把同一个随机数付给两个完全没关系的变量,这样的处理方式感觉不太舒服
roydux 2006-11-10
  • 打赏
  • 举报
回复
To:hailongchang(novice)

符号名ival存在了不是应该给默认0吗,怎么给个随机数呢?
hailongchang 2006-11-10
  • 打赏
  • 举报
回复
这个是一个随机的值,因为编译要进行扫描,所以符号名ival就存在了,所以可以赋值给它本身,只是这样做不太好.


其实了解一些编译和链接的知识对学习语言的帮助会很大

65,199

社区成员

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

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