【问题标题】:Returning value in conditional operator条件运算符中的返回值
【发布时间】:2019-02-25 07:58:41
【问题描述】:

我试图通过使用条件运算符根据条件返回值 true 或 false,但出现错误。这是我的代码,

bool isEmpty()
{
    int listSize = Node::size();
    listSize > 0 ? return (true) : return (false);
    return false;
}

这是错误,

error C2107: illegal index, indirection not allowed

现在我被困在这里了。我不明白这一点。逻辑上我认为它应该是正确的。请指导我。谢谢

【问题讨论】:

    标签: c++ c conditional-operator


    【解决方案1】:

    您只能将表达式* 作为三元条件的操作数,而不是语句。通常的说法是:

    return listSize > 0 ? true : false;
    

    甚至更好,

    return listSize > 0;
    

    甚至更好,

    bool isEmpty() { return Node::size() > 0; }
    


    *) 由于您将其标记为 C 和 C++,因此请知道在两种语言的可接受表达式之间存在 subtle difference

    【讨论】:

    • 感谢您提到不同之处。因为它只是一个 sn-p,所以我认为标记两种语言会更好。
    • 最后一个可能看起来不错。但是,当您进入调试时间时,您会希望在返回之前已将结果分配给一个临时对象,以便在东边进行检查。
    • @Kerrek 无论如何,我们是否需要将三元条件放在大括号内?为此,我收到了代码审查评论。
    • @cppcoder:你不需要。但取决于你如何使用它,它可能会对读者有所帮助。 知道a ? b : c = d做什么吗? :-)
    • @Kerrek 这里的优先级是什么?我猜,它会将d 分配给c,如果a<=0 则返回c
    【解决方案2】:

    除非你有更深层次的理由这样做我想念,你应该只是return (listSize > 0);

    【讨论】:

    • 不错,简单而简短。谢谢:)
    【解决方案3】:

    三元运算符 (?:) 并非设计为这样使用的。您有语法错误。

    试试这个:

    return (listSize > 0);
    

    【讨论】:

    • 不错,简单而简短。谢谢:)
    猜你喜欢
    • 2013-02-16
    • 2013-06-18
    • 1970-01-01
    • 2011-07-20
    • 2012-01-22
    • 1970-01-01
    相关资源
    最近更新 更多