私のプログラムでは、何か特別なことを示すために、符号なし変数の値として -1 (別名 UINT_MAX) をよく使用します。また、この値と比較します。より高いレベルの警告メッセージをオンにすると、コンパイラ (VS と GCC の両方) がこの構文を好まないことが明らかになります。
// warning C4245: 'initializing' : conversion from 'int' to 'unsigned int', signed/unsigned mismatch
unsigned a = -1;
// warning C4146: unary minus operator applied to unsigned type, result still unsigned
unsigned b = -1U;
// fine but messy
unsigned c = unsigned(-1);
// no warning on VS, signed/unsigned comparison warning with GCC
if (a == -1)
{
std::cout << "check\n";
}
質問 1: 上記の構文 (それぞれの場合) は正当な C++ コードですか?
質問 2: unsigned(-1) を使用して unsigned int に代入/比較するすべての場所で、本当に unsigned(-1) を記述する必要がありますか? または、コンパイラの警告をトリガーしないよりクリーンな方法はありますか?