问题描述
将以下代码从VS2017移植到2019会弹出一个新警告(这是原始代码的简化版本)。
#include <map>
#include <vector>
using namespace std;
typedef map<int,vector<vector<void*> > > MyMap;
const int N = 16;
int main()
{
MyMap myMap;
for (auto mapIt = myMap.begin(),mapEnd = myMap.end(); mapIt != mapEnd; mapIt++)
{
int j = 0;
for (auto keyIt = (*mapIt).second.begin(),keyEnd = (*mapIt).second.end(); keyIt != keyEnd,j < N; keyIt++,j++)
{
for (auto vecIt = (*keyIt).begin(),vecEnd = (*keyIt).end(); vecIt != vecEnd; vecIt++)
{
if (*vecIt)
{
}
}
}
}
return 0;
}
请注意,for循环具有两个逗号分隔的初始化器,两个逗号分隔的条件等。如果我从for循环中删除了j < N
条件,该警告将消失。如果我同时交换两个条件,也不会发出警告。
我假设!=
运算符有一些返回值被丢弃,并且如果它是唯一条件,或者如果它是最后一个条件,则不将其丢弃?这是编译器的预期行为吗?
解决方法
谢谢大家!
看来,此遗留代码的意图确实是为了 svg.append("g")
.attr("fill","steelblue")
.attr("fill-opacity",0.8)
.selectAll("rect")
.data(data)
.join("rect")
.attr("d",d => valuebox)
这两个条件。逗号运算符是一个错误。