为什么我不能用一个“突破”声明C ++中的三元条件语句中?为什么我不能用一个“突破”声明C ++中的

2019-05-12 10:09发布

Node是一个非常简单的类与只是一个构造函数和几个变量:一个“名”(实际上只是一个char)和两个子节点的指针被称为“左”和“右”。

我刚开始写一些代码,需要下降到最左边的节点,我很高兴,当我来到了这一点:

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:

三元条件运算符是组合多个表达式成更大的表达操作。 break是一个语句 ,而不是一个表达式 ,所以它不能三元条件表达式内部使用。

你可以,不过,改写这样的代码:

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

希望这可以帮助!



Answer 2:

为什么我不能用一个“突破”声明C ++中的三元条件语句中?

因为三元运算符是不言可言,这是一个操作符,它是由表情,不发言。 break是一个语句,不是表达式。



文章来源: Why can't I use a “break” statement inside a ternary conditional statement in C++?