-->
運算子?最近看到網路論壇中有人在討論 C/C++ 程式語言有趣的箭頭 -->
運算子,跟大家分享一下。
while
迴圈:
#include <stdio.h> int main() { int x = 10; while (x --> 0) { // x 遞減至 0 printf("%d ", x); } }
這個程式碼的邏輯很簡單,就是讓 x
逐步遞減至 0
,不過 while
的判斷式在乍看之下有些奇怪,正常的 C 語言似乎沒有 x --> 0
這種箭頭的運算子,但是這個程式卻可以正常執行。
這是 C++ 的版本,其實大同小異:
#include <iostream> int main() { int x = 10; while (x --> 0) { // x 遞減至 0 std::cout << x << " "; } }
事實上根本就沒有所謂的箭頭運算子,-->
只是 --
與 >
兩個運算子放在一起使用的狀況,也就是說 x --> 0
的意思是 (x--) > 0
,只不過這樣的寫法非常容易讓人混淆而已。
以下還有幾種類似的寫法:
#include <stdio.h> int main() { int x = 10; while (0 <-- x) { // x 遞減至 0 printf("%d ", x); } }
C++ 還允許這種寫法:
#include <iostream> int main() { int x = 10; while (0 <---- x) { // x 遞減至 0 std::cout << x << " "; } }
<----
就是 < -- --
的意思,每次讓 x
遞減 2
。
這幾段程式碼的執行效果有些小差異,這裡的重點只是示範這種特別的寫法是可以正常執行的。
這樣的寫法雖然可以正常執行,但是相當不建議這樣寫,因為這樣很容易讓人看不懂。
如果要惡搞別人可以這樣寫 🙂
#include <iostream> int main() { int x = 10; while (0 <--++--++-- x) { // x 遞減至 0 std::cout << x << " "; } }
參考資料:StackOverflow