我可以在布尔表达式中依靠逗号运算符吗

时间:2018-12-14 03:17:41

标签: c++ operators

void test()
{
    string s = " ,";
    if (boost::trim_if(s, boost::is_any_of(" ,")), s.empty())
    {
        cout << "empty";
    }
    else
    {
        cout << s << endl;
    }
}

根据该How does the Comma Operator work,该表达式应该等于boost :: trim_if(),它返回void。 但是它现在可以工作,因此它执行boost :: trim_if()和s.empty()。 我可以依靠这种表达吗?

您也许会说我应该这样写代码:

boost::trim_if(s, boost::is_any_of(" ,"));
if (s.empty())
{
    cout << "empty";
}

但是我的条件是我们的旧代码是

string s;
if(FAILED(GetStringFromAPI(s)) || s.empty() )
{
}

我只想修改一行

if(FAILED(GetStringFromAPI(s)) || (boost::trim_if(...), s.empty()) )
{
}

1 个答案:

答案 0 :(得分:3)

是的,完全可以使用。 cppreference says this(强调我的观点):

  

在逗号表达式E1, E2中,对表达式 E1进行求值,其结果将被丢弃(尽管具有类类型,但直到包含完整表达式的末尾),并且在表达式E2的求值开始之前完成其副作用

请注意,像其他运算符一样,逗号运算符可以被覆盖,在这种情况下,上述内容可能不成立。