与 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() ) {
}
这个结构可能有什么问题?
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() ) {
}