提问人:user9196120 提问时间:2/16/2018 最后编辑:Vadim Kotovuser9196120 更新时间:5/24/2018 访问量:97
与 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 ^
答:
0赞
Dai
2/16/2018
#1
根据这个答案:https://stackoverflow.com/a/7837092/159145 语句条件的内容必须是表达式或单变量声明。if
在你的例子中,是一个单变量声明,但是因为你把它与 的条件结合起来,所以它就不再是单变量声明了,但它也不是一个表达式,因为它包含一个声明 - 因此编译器抱怨。auto idx = diff * 2
<= objRef.size()
if
将代码更改为在语句之前计算:idx
if
auto idx = diff * 2;
if( idx <= objRef.size() ) {
}
如果要限制 then 使用匿名范围的范围:idx
{
auto idx = diff * 2;
if( idx <= objRef.size() ) {
}
}
...或者干脆完全省略,假设你没有进一步的用途:auto idx
if( diff * 2 <= objRef.size() ) {
}
评论
1赞
aschepler
2/16/2018
请注意,C++2 可能会允许 ,相当于您的第二个建议。if ( auto idx = diff * 2; idx <= objRef.size() )
0赞
Swift - Friday Pie
2/16/2018
@aschepler天哪,这看起来很丑
评论