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

Kin*_*ook 6 c++ binary-tree ternary-operator data-structures

Node是一个非常简单的类,只有一个构造函数和一些变量:一个"名称"(实际上只是一个char)和两个名为"left"和"right"的子节点指针.

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

Node *current = this->root;
while (true) (current->left != nullptr) ? current = current->left : break;
Run Code Online (Sandbox Code Playgroud)

看起来很简单:在无限循环中,检查当前是否有一个左子,如果是,将当前设置为该左子,如果没有,则跳出循环.这是一个很酷的小单行,不太难以理解.(我评论了它!)

好吧,我的编译器不喜欢它:

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

而且,只是在while循环中抛出一些括号并将三元运算符移动到它自己的行上并没有帮助(不出所料).我不得不把它变成if/else让编译器接受它.

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

tem*_*def 13

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

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

while (current->left != nullptr) current = current->left;
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!


use*_*421 5

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

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