为什么我不能使用" break" C ++中三元条件语句中的语句?

时间:2015-02-21 06:03:12

标签: c++ data-structures binary-tree ternary-operator

Node是一个非常简单的类,只有一个构造函数和一些变量:a" name" (实际上只是一个char)和两个子节点指针叫做" left"和"对"。

我刚刚开始编写一些需要放到最左边节点的代码,当我提出这个问题时我很高兴:

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让编译器接受它。

有人可以解释它是如何解释单行及其反对的原因吗?

2 个答案:

答案 0 :(得分:13)

三元条件运算符是将多个表达式组合成更大表达式的运算符。 break语句而不是表达式,因此不能在三元条件表达式中使用。

但是,您可以像这样重写代码:

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

希望这有帮助!

答案 1 :(得分:4)

  

为什么我不能在C ++中的三元条件语句中使用“break”语句?

因为三元运算符根本不是一个语句,所以它是一个运算符,它由表达式而不是语句组成。 break是一个陈述,而不是表达。