将以下代码从 VS2017 移植到 2019 会弹出一个新警告(这是原始版本的简化版本)。
main.cpp(18,90):警告 C4834:丢弃具有“nodiscard”属性的函数的返回值
#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 循环有两个逗号分隔的初始化程序、两个逗号分隔的条件等。如果我j < N
从 for 循环中删除条件,警告就会消失。如果我交换这两个条件,也没有警告。
我假设!=
运算符有一些被丢弃的返回值,如果它是唯一的条件,或者如果它是最后一个条件,它不会被丢弃?这是编译器的预期行为吗?