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 ループには、コンマで区切られた 2 つの初期化子、コンマで区切られた 2 つの条件などがあることに注意してください。forj < Nループから条件を削除すると、警告が消えます。2 つの条件を入れ替えても、警告はありません。

演算!=子には破棄される戻り値があり、それが唯一の条件である場合、または最後の条件である場合は破棄されないと思いますか? これはコンパイラの予想される動作ですか??

4

1 に答える 1