--> 運算子?最近看到網路論壇中有人在討論 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