codecamp

C++ 多次赋值

对同一变量多次赋值在C++里是合法的,这一点之前并没有多说。第二次赋值的效果是用新值替换掉旧值。

int fred = 5;
cout << fred;
fred = 7;
cout << fred;

这段代码输出57,因为第一次打印fred时,其值是5;第二次打印时其值为7。

这种多次赋值的机制正是我把变量形容为值的容器的原因。在为变量赋值时,修改的是容器里的内容,如图所示:

enter image description here

当存在对同一变量的多次赋值时,区分赋值语句和判等语句就显得尤为重要。C++使用=符号做赋值操作,因此很容易把诸如a=b这样的语句理解为判等语句。事实不是这样!

首先,相等是可交换的,而赋值不可以。比如,数学上若a=7则7=a,但是在C++里语句a=7;是合法的,7=a则不合法。

此外,数学上的等式永远为真。若现在a=b,则a永远等于b。在C++里,赋值语句可以使两个变量相等,但这两个变量未必总是相等的。

int a = 5;
int b = a; // 现在a和b相等
a = 3; // a和b不再相等

第三行改变了a的值,但未改变b的值,所以二者不再相等。在很多编程语言中,为避免混淆,赋值用另一种符号代替,如<-或:=。

尽管多次赋值非常有用,但尚需谨慎使用。如果变量的值在程序的不同部分总是在改变,代码就会非常难以阅读和调试。

C++ 术语表
C++ 迭代
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }