int i ; const int val=i ; 在C++中这种赋值对吗?
答案:6 悬赏:10 手机版
解决时间 2021-03-25 18:52
- 提问者网友:缘字诀
- 2021-03-25 10:30
int i ; const int val=i ; 在C++中这种赋值对吗?
最佳答案
- 五星知识达人网友:野味小生
- 2021-03-25 11:43
首先这种定义方式是可以通过编译的。
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;就是不合法的了。
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;就是不合法的了。
全部回答
- 1楼网友:零点过十分
- 2021-03-25 16:57
不要太相信理论,你可以试试,编译器通过才是王道……
- 2楼网友:零点过十分
- 2021-03-25 15:39
如果 val 是类的变量,就不能这样赋值。你只能在定义的时候初始化一个常整数或者在类的构造函数中初始化它。
如果是全局变量的话,就可以编译,但会报警告。在VC6.0下,另外接着写 cin >> i; cout << i << endl; 可以运行出正确结果而只是有个警告“local varriable 'i' used without having been initialized”
如果是全局变量的话,就可以编译,但会报警告。在VC6.0下,另外接着写 cin >> i; cout << i << endl; 可以运行出正确结果而只是有个警告“local varriable 'i' used without having been initialized”
- 3楼网友:愁杀梦里人
- 2021-03-25 15:03
语法上是没错的,但是你这样定义后,由于i没有初始化,所以它的值是未知的,这样一来常量val的值也是未知的,并且每次运行的结果都不一样。追问val 作为const类型不是不能用变量初始化吗?
但是这种赋值确实没错,请问什么时候对const用变量赋值会出现错误
但是这种赋值确实没错,请问什么时候对const用变量赋值会出现错误
- 4楼网友:动情书生
- 2021-03-25 13:49
不对
val是常量 用一个变量给它赋值肯定错了
因为i是可变的 而val要求不变
val是常量 用一个变量给它赋值肯定错了
因为i是可变的 而val要求不变
- 5楼网友:第四晚心情
- 2021-03-25 13:21
这种赋值没有问题,这就相当于 const int val = 常量, 虽然 i 的值跟是否是全局变量有关,但无论它的值是0还是编译器随机给的,对val的赋值都是合法的。追问val 作为const类型不是不能用变量初始化吗?
但是这种赋值确实没错,请问什么时候对const用变量赋值会出现错误
但是这种赋值确实没错,请问什么时候对const用变量赋值会出现错误
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯