geeksforgeeks - 為什麼我不能在C++的三元條件語句中使用“break”語句?



binary tree traversal java (2)

三元條件運算符是將多個表達式組合成一個更大的表達式的運算符。 break是一個語句而不是一個表達式 ,所以它不能在三進制條件表達式中使用。

但是,您可以像這樣重寫代碼:

while (current->left != nullptr) current = current->left;

希望這可以幫助!

https://src-bin.com

Node是一個非常簡單的類,只有一個構造函數和一些變量:一個“name”(實際上只是一個char)和兩個子節點指針“left”和“right”。

我剛剛開始寫一些代碼,需要放在最左邊的節點,當我想到這個時,我感到非常高興:

Node *current = this->root;
while (true) (current->left != nullptr) ? current = current->left : break;

似乎很簡單:在一個無限循環中,檢查當前是否有一個左邊的孩子,如果是的話,設置當前的左邊的孩子,如果沒有,跳出循環。 這是一個很酷的小單線,不是太難讀。 (我評論它!)

那麼,我的編譯器不喜歡它:

iterator.cpp:20:70: error: expected expression
    while (true) (current->left != nullptr) ? current = current->left : break;
                                                                        ^
1 error generated.

另外,只要將一些大括號插入到while循環中,並將三元運算符移到它自己的行中就沒有幫助(不出所料)。 我不得不把它變成一個if / else讓編譯器接受它。

有人能解釋一下,它是如何解釋單線和為什麼反對?


Answer #1

為什麼我不能在C ++的三元條件語句中使用“break”語句?

因為三元運算符根本不是一個語句,所以它是一個運算符,它由表達式組成,而不是語句。 break是(只)一個聲明,而不是一個表達。





ternary-operator