C++為什么不叫++C?——淺談前自增與后自增的區別


《C++ Primer》確實給我帶來了很多驚喜。

作為一本專業的具有較高門檻的"入門書",它有很多地方實在是國內的書不可及的,這不僅在於內容上的嚴謹,更表現在優秀的習題所帶給學習者的啟迪。

 

習題5.16

你認為為什么C++不叫做++C?

 

看到這個習題,頓感眼前一亮(不禁想起某些國內書籍的題目,真是平淡如水),這對於理解前自增操作與后自增操作而言着實是個好的題目。

想弄明白這個問題,就需要先理解一些基礎的概念。什么是自增操作呢?

 

++操作符,即自增操作符。自增操作符有兩種形式:前置操作和后置操作。前自增操作生成左值,在給操作數加1后返回改變后的操作數值。后自增操作生成右值,給操作數加1但返回未改變的操作數原值。

*事實上,因為C++具有操作符重載的功能,自增操作不僅僅可以表示加1

 

前置操作返回的是加1后的值,返回的是對象本身,所以這是左值。

后置操作返回的是加1前的值,其返回值可以近似的理解為與原操作數值相等的常量,所以是一個右值。

 

具體例子:

 

int i = 0, j;
j = ++i; // j = 1 , i = 1:prefix yields incremented value
j = i++; // j = 1 , i = 2:postfix yields unincremented value

 

附左值與右值的概念:

 

左值:可以出現在賦值操作左邊的值。非const左值可讀可寫。

右值:可用於賦值操作的右邊但不能用於左邊的值。右值只能讀不能寫。

 

左值可以出現在賦值操作右端,但右值不可以出現在賦值操作左端,將后自增操作置於賦值操作左端將會出現編譯錯誤。

另外需要注意:

 

由於后置操作符要返回未加1前的值作為操作的結果,所以必須要保存操作數原來的值,對於比較復雜的類型,這種額外工作可能會花費更大的代價。

建議:只有在必要時才使用后置操作符。

 

最后,讓我們用全新的角度去審視C++的命名原因

 

C++之名是Rick Mascitti在1983年夏天定名的(參見The C++ Programming Language(Special Edition)1.4節),C說明它本質上是從C語言演化而來的,“++”是C語言的自增操作符。C++語言是C語言的超集,是在C語言基礎上進行的擴展(引入了new、delete等C語言中沒有的操作符,增加了面向對象程序設計的直接支持,等等),是先有C語言,再進行++。根據自增操作符前、后置形式的差別,C++表示對C語言進行擴展之后,還可以使用C語言的內容;而寫成++C則表示無法再使用C的原始值了,也就是說C++不能向下兼容C了,這與實際情況不符。 

 

如果以后有人問你這個問題,你會回答了嗎?:)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM