-1

この質問が他の場所で回答されている場合は申し訳ありませんが、検索しましたが、まだ回答が見つかりません...

以下のコードをコンパイルすると、次の警告が表示されます。

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++;」は警告を生成しません。その理由はわかりません。

私はまだここで質問することに慣れているので、この質問が些細なことや不明確である場合はご容赦ください。ありがとう!

4

1 に答える 1