0

将以下代码从 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 循环中删除条件,警告就会消失。如果我交换这两个条件,也没有警告。

我假设!=运算符有一些被丢弃的返回值,如果它是唯一的条件,或者如果它是最后一个条件,它不会被丢弃?这是编译器的预期行为吗?

4

1 回答 1

0

谢谢大家!似乎这个遗留代码的意图确实是&&两个条件。逗号运算符是一个错误。

于 2020-09-03T05:19:27.737 回答