この質問が他の場所で回答されている場合は申し訳ありませんが、検索しましたが、まだ回答が見つかりません...
以下のコードをコンパイルすると、次の警告が表示されます。
warning: conversion to 'short unsigned int' from 'int' may alter its value
これがコードの抜粋です(私の質問を説明するためのいくつかの例):
std::vector<unsigned short int> list = {1};
unsigned short int one = 1;
one += list.at(0); // produces warning
one += 1; // produces warning
one += static_cast<unsigned short int> 1; // produces warning
one++; // does not produce warning
足し算以外の算術も試してみました。「int」から「unsigned short int」に変換していると主張して、コンパイラがこの警告をスローするのはなぜですか (特に明示的に unsigned としてキャストした場合)。また、2 番目のケース 'one += 1;' では、式の右辺が正の数であるため、コンパイラはそれを符号なし変数 'one' に追加しても問題がないように思われます。
また、最終テスト「one++;」は警告を生成しません。その理由はわかりません。
私はまだここで質問することに慣れているので、この質問が些細なことや不明確である場合はご容赦ください。ありがとう!