如何在if语句中定义变量和比较值?

het*_*ing 3 c++ variables syntax if-statement initialization

我有一个这样的代码片段:

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)

JeJ*_*eJo 7

如何在if语句中定义变量和比较值?

您可以通过语言功能来执行此操作,if使用 init-statement,如下所示:

if(auto iter = std::find(v.begin(), v.end(), i); // declare + initialize
  iter != v.end())                               // use in condition
{
    // ....
}
Run Code Online (Sandbox Code Playgroud)

您可以if通过此语法声明、初始化和使用变量来检入语句。通过这样做,您将能够仅在if-statement 中限制此类变量的范围。


我想知道为什么第一个版本不起作用[...]

因为它不是有效的 C++ 语句。您不能像第一个版本中显示的那样声明、初始化和使用变量。

但是,根据 C++ 语言,允许变量初始化和直接用于检查。因此第二个起作用了!


旁注:您可以简单地使用auto关键字来提及诸如std::vector<int>::iterator.