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()) )
{
}
答案 0 :(得分:3)
是的,完全可以使用。 cppreference says this(强调我的观点):
在逗号表达式
E1, E2
中,对表达式E1
进行求值,其结果将被丢弃(尽管具有类类型,但直到包含完整表达式的末尾),并且在表达式E2
的求值开始之前完成其副作用
请注意,像其他运算符一样,逗号运算符可以被覆盖,在这种情况下,上述内容可能不成立。