C++ の char, signed char, unsigned char は違う型 ?

結果から言うと char, signed char, unsigned char はそれぞれ違う種類の型です。試しに以下のコードを実行してみると結果は上から true, false, false  になります。

なぜこんな事になるかと言うと、元も子もないですが、そう規格で決まっているからです。 試しに C++14 の Working Draft を見てみますと。

3.9.1 Fundamental types

Objects declared as characters (char) shall be large enough to store any member of the implementation’s basic character set. If a character from this set is stored in a character object, the integral value of that character object is equal to the value of the single character literal form of that character. It is implementationdefined whether a char object can hold negative values. Characters can be explicitly declared unsigned or signed. Plain char, signed char, and unsigned char are three distinct types, collectively called narrow character types.

C++14 のドラフトを引用しましたが、これに関しては以前と変わっていません。

「char型が符号付きか符号無しかは処理系依存」というのは組み込み系では比較的よく知られていると思いますが (開発環境によってはどちらにするかIDE上でユーザーに設定させるものある)、 「型の種類が全く別」というのは案外認識されていないかも(?) 型を細かく分けてオーバーロードしている時とか、メタメタしたコードを書いてる時とかに意図した結果にならずにハマるかもしれませんのでメモ …

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中