簡體   English   中英

MSVC 2019:C++ for 循環更改警告中逗號分隔條件的順序

[英]MSVC 2019: Order of comma-separated conditions in C++ for-loop changes warnings

將下面的代碼從 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 循環有兩個逗號分隔的初始化器、兩個逗號分隔的條件等。如果我從 for 循環中刪除j < N條件,警告就會消失。 如果我交換兩個條件,也沒有警告。

我假設!=運算符有一些被丟棄的返回值,如果它是唯一的條件,或者如果它是最后一個條件,它不會被丟棄? 這是編譯器的預期行為嗎??

謝謝大家! 似乎這個遺留代碼的意圖確實是&&兩個條件。 逗號運算符是一個錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM