如何定义变量和比较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)

如何定义变量和比较if语句内的值?

自<<p> strong> 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

With

if ((int a = 1) == 2) ...

尝试在表达式中定义和初始化变量。这是不允许的。

但是当你写

int a;
if ((a = 1) == 2) ...

在嵌套表达式中执行简单赋值。这完全正确。

最新更新