与 if 语句条件中的赋值相关的错误

An error related to assignment within an if-statement condition

这个结构可能有什么问题?

    if((auto idx = diff * 2) <= objRef.size()){


          //do something
}

其中 diff 是 ptrdiff_t 类型,objRef 是 std::vector.

类型

为上述语句生成以下编译器错误:

   1 In file included from main.cpp:1:
   2 ./bt.hpp:597:28: error: expected ')'
   3                   i
   4                   if((auto idx = diff * 2) <= objRef.size())
   5 f((auto idx = diff * 2) <= objRef.size())
   6                            ^
   7 ./bt.hpp:597:22: note: to match this '('
   8                   if((auto idx = diff * 2) <= objRef.size())
   9                      ^
  10 ./bt.hpp:597:44: error: expected expression
  11                   if((auto idx = diff * 2) <= objRef.size())
  12                                            ^

根据这个答案: if 语句条件的内容必须是 表达式 single-variable-declaration.

在你的情况下,auto idx = diff * 2 是 single-variable-declaration,但因为你将它与 <= objRef.size() 组合,所以 if 的条件不再是 single-variable-declaration,但它不是 表达式,因为它包含一个声明 - 因此编译器会抱怨。

更改代码以在 if 语句之前计算 idx

auto idx = diff * 2;
if( idx <= objRef.size() ) {

}

如果要限制 idx 的范围,请使用 anonymous-scope:

{
    auto idx = diff * 2;
    if( idx <= objRef.size() ) {

    }
}

...或者完全省略 auto idx,假设您不再需要它:

if( diff * 2 <= objRef.size() ) {

}