首先这种定义方式是可以通过编译的。 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; 就明白啦。const变量默认是在定义该变量文件的局部变量。而如果定义在头文件中,则必须使用常量表达式进行初始化,因为编译器需要在编译时就计算出后面初始化表达式的值。像这里,如果在main函数体内这么定义,是可以的,因为是局部变量。 const的语义就是要这个变量不能修改,在定义了一个如const int i = 10; 然后再赋值如 i =11;就是不合法的了。
int i ; const int val=i ; 在C++中这种赋值对吗?
最新推荐文章于 2023-09-10 21:27:47 发布