永发信息网

int i ; const int val=i ; 在C++中这种赋值对吗?

答案:6  悬赏:10  手机版
解决时间 2021-03-25 18:52
int i ; const int val=i ; 在C++中这种赋值对吗?
最佳答案
首先这种定义方式是可以通过编译的。
int i; //定义(注意是定义,意味着分配了内存)一个int型变量i,同时没有初始化。那么i的值就是分配内存位置的值,这个值可能为任意值。
const int val = i; // 定义一个const int对象val,并初始化,那么初始化后val的值就是刚才i内存位置的值。定义后,val即便仍然是左值(意味着可赋值),但任何修改val的尝试都会导致编译错误。所以val的值是不可修改了。
所以说,上述方式没错,但i没有初始值,导致定义val是没有意义的。
你可以试试int i = 10;
const int val = i;
cout << i << endl;
cout << val << endl;
i = 5; //修改
cout << i << endl;
cout << val << endl;
就明白啦。追问val 作为const类型不是不能用变量初始化吗?
但是这种赋值确实没错,请问什么时候对const用变量赋值会出现错误追答是这样的。
const变量默认是在定义该变量文件的局部变量。而如果定义在头文件中,则必须使用常量表达式进行初始化,因为编译器需要在编译时就计算出后面初始化表达式的值。像这里,如果在main函数体内这么定义,是可以的,因为是局部变量。
const的语义就是要这个变量不能修改,在定义了一个如const int i = 10; 然后再赋值如 i =11;就是不合法的了。
全部回答
不要太相信理论,你可以试试,编译器通过才是王道……
如果 val 是类的变量,就不能这样赋值。你只能在定义的时候初始化一个常整数或者在类的构造函数中初始化它。
如果是全局变量的话,就可以编译,但会报警告。在VC6.0下,另外接着写 cin >> i; cout << i << endl; 可以运行出正确结果而只是有个警告“local varriable 'i' used without having been initialized”
语法上是没错的,但是你这样定义后,由于i没有初始化,所以它的值是未知的,这样一来常量val的值也是未知的,并且每次运行的结果都不一样。追问val 作为const类型不是不能用变量初始化吗?
但是这种赋值确实没错,请问什么时候对const用变量赋值会出现错误
不对

val是常量 用一个变量给它赋值肯定错了

因为i是可变的 而val要求不变
这种赋值没有问题,这就相当于 const int val = 常量, 虽然 i 的值跟是否是全局变量有关,但无论它的值是0还是编译器随机给的,对val的赋值都是合法的。追问val 作为const类型不是不能用变量初始化吗?
但是这种赋值确实没错,请问什么时候对const用变量赋值会出现错误
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
电脑运行一会内存就全占满了是什么原因
龙口农商银行(大王分理处)地址在哪,我要去那
动量与动量矩~~题如:两个等质量等外形的圆
奇骏有哪些缺点和优点
反清是什么意思
山西云长道人是骗子么
谢楠胸多大
不管是他他他,还是没有他,空气中的温度、、
76人队主场球馆名字?
使用黄色的布料做床上用品有什么忌讳吗
小弟不才 请问fsx 和专业模拟飞行10的区别
为什么我在百度回答的内容在搜狗问问里也有?
眼镜刚配好第二天就给搞坏了,要注意什么
木香的功效与作用 木香有哪些好处
为什么QQ和好友聊了30天还没有巨轮?
推荐资讯
noting ( )(be)difficult if you put your he
epon+eoc是什么意思
玛卡时尚先生在什么地方啊,我要过去处理事情
出国留学是一定要找中介吗?
成都男科医院怎样才能选择最好的
北纬10度西经60度的首都位于哪个大洲
CAD电气图里面FAS和LD表示什么
web页面渲染是采用php渲染好,还是采用ajax方
黄历中动土和破土的区别?第一星座网
请问教案分家家采用了什么操作形势?
南京柯米物联网科技有限公司怎么样?
如何才能让想象变成现实
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?