ホームページ > バックエンド開発 > C++ > `std::vector` に対して `-1 < a.size()` が False と評価されるのはなぜですか?

`std::vector` に対して `-1 < a.size()` が False と評価されるのはなぜですか?

Susan Sarandon
リリース: 2024-12-10 10:03:09
オリジナル
595 人が閲覧しました

Why Does `-1 < a.size()` Evaluate to False for a `std::vector`?

std::vector サイズ否定のパラドックス: 明らかに

不可解なプログラムで、-1

符号なし整数型について

std::vector の size メンバーは、符号なし整数型を返します。符号なし整数型は正の整数のみを表し、負の値を格納する機能がありません。符号なし型で負の値が検出されると、2 の補数変換として知られるプロセスを通じて、大きな正の値に自動的に変換されます。

比較における型昇格

比較では -1

説明例

次のコード スニペットは、基本型での同じ動作を示しています。

#include <iostream>

int main()
{
  std::cout << std::boolalpha;
  unsigned int a = 0;
  int b = -1;
  std::cout << (b < a) << "\n";  // prints false
}
ログイン後にコピー

この例では、符号付き整数 -1 は、比較される前に符号なし整数に昇格されます。 a.したがって、結果は false になります。

結論

要約すると、元の std::vector 比較で観察された不可解な動作は、次の場合に負の整数の型昇格から発生します。符号なし型と比較します。負の整数は実質的に大きな正の値に変換され、予期しない結果が生じます。ベスト プラクティスとして、符号付きの値を符号なしの型に明示的にキャストせずに、符号付き整数と符号なし整数を比較することは避けてください。

以上が`std::vector` に対して `-1 < a.size()` が False と評価されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート