如何在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.