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

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

if ((std::vector<int>::iterator iter = std::find(v.begin(), v.end(), i)) != v.end()) 
{
    // ....
}

但是编译器抱怨这个语句。但是,将我的代码更改为

std::vector<int>::iterator iter;
if ((iter = std::find(v.begin(), v.end(), i)) != v.end()) 
{
    // ....
}

解决了这个问题。

所以,我想知道为什么第一个版本不起作用,下面语句的返回值是什么?

std::vector<int>::iterator iter = std::find(v.begin(), v.end(), i)

回答

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

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

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


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

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


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


以上是如何在if语句中定义变量和比较值?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>