[英]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.