【发布时间】:2015-04-22 22:35:42
【问题描述】:
Node 是一个非常简单的类,只有一个构造函数和几个变量:一个“名称”(实际上只是一个字符)和两个名为“left”和“right”的子节点指针。
我刚开始写一些需要放到最左边节点的代码,当我想到这个时我很高兴:
Node *current = this->root;
while (true) (current->left != nullptr) ? current = current->left : break;
看起来很简单:在无限循环中,检查 current 是否有左孩子,如果有,则将 current 设置为该左孩子,如果没有,则跳出循环。这是一个很酷的小单行,不太难读。 (我评论了它!)
好吧,我的编译器不喜欢它:
iterator.cpp:20:70: error: expected expression
while (true) (current->left != nullptr) ? current = current->left : break;
^
1 error generated.
此外,只是在 while 循环中添加一些大括号并将三元运算符移动到它自己的行并没有帮助(不足为奇)。我必须把它变成一个 if/else 让编译器接受它。
有人能解释一下它是如何解释单行的以及它为什么反对吗?
【问题讨论】:
-
条件 表达式 不是“语句”。这是一个表达式。
break不是一个表达式。这是一个声明。您不能将语句放在表达式中。
标签: c++ data-structures binary-tree ternary-operator