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

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

Node 是一个非常简单的类,只有一个构造函数和几个变量:一个“名称”(实际上只是一个字符)和两个名为“left”和“right”的子节点指针。

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

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

看起来很简单:在无限循环中,检查 current 是否有左 child ,如果有,则将 current 设置为左​​ child ,如果没有,则跳出循环。这是一个很酷的小单行,不太难读。 (我评论了它!)

嗯,我的编译器不喜欢它:

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

此外,只是将一些大括号放入 while 循环并将三元运算符移至它自己的行并没有帮助(不足为奇)。我必须将它变成 if/else 才能让编译器接受它。

谁能解释一下它是如何解释单行线的以及它反对的原因?

最佳答案

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

不过,您可以像这样重写代码:

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

希望这对您有所帮助!

关于c++ - 为什么我不能在 C++ 的三元条件语句中使用 "break"语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28642693/

相关文章:

c++ - CString 数组 -> 内存泄漏?

c - C语言树数据结构教程

c++ - 我如何在 C++ 中表示二进制数(用于霍夫曼编码器)?

java - 字符串二叉搜索树

c++ - 复制包含字符串的 CORBA::Any 时 CORBA 程序段错误

c++ - 如何使用 cmake 在子目录中构建库?

c++ - 旧版 MFC 代码 (2005) 无法在 VC 2010 上编译

c++ - 在 C++ 中创建节点的不同方式感到困惑?

c++ - 如何评估任何给定的表达式

c - 在C中将数学方程插入二叉树