我想知道是否有办法把它放在一条线上?
if (auto r = getGlobalObjectByName(word)) r->doSomething; // This works fine
if (!auto r = getGlobalObjectByName(word)) r->doSomething; // Says "expected an expression"
if (auto r = getGlobalObjectByName(word) == false) r->doSomething; // Also doesn't work.
Run Code Online (Sandbox Code Playgroud)
我也尝试用额外的括号围绕它,但这似乎不起作用.我发现这在一条线上非常方便.
我有一个这样的代码片段:
if ((std::vector<int>::iterator iter = std::find(v.begin(), v.end(), i)) != v.end())
{
// ....
}
Run Code Online (Sandbox Code Playgroud)
但是编译器抱怨这个语句。但是,将我的代码更改为
std::vector<int>::iterator iter;
if ((iter = std::find(v.begin(), v.end(), i)) != v.end())
{
// ....
}
Run Code Online (Sandbox Code Playgroud)
解决了这个问题。
所以,我想知道为什么第一个版本不起作用,下面语句的返回值是什么?
std::vector<int>::iterator iter = std::find(v.begin(), v.end(), i)
Run Code Online (Sandbox Code Playgroud)