Translations of this page?:

C++データ型

C++プログラマーはC言語上では、次の5つの型を使用することができます: void, int, float, double, char。

説明
void型がないことを表す型
int整数
float浮動小数点数
double倍精度浮動小数点数
char文字

これに加えて、C++ではさらに2つの型(bool, wchar_t)が定義されています。

説明
boolブーリアン型: true もしくは false
wchar_tワイド文字

型修飾子

上記の型のうちのいくつかの型は, singed, unsigned, short, longという修飾子を付けることができます。また、これらの型修飾子が単独で使用される場合もあり、その場合はデータ型としてintが指定されたとみなされます。使用可能な完全なリストを以下に示します。同じ意味を持つ型は同じ行に記述されています:

整数型
bool
char
signed char
unsigned char
wchar_t
shortshort intsigned shortsigned short int
unsigned shortunsigned short int
intsignedsigned int
unsignedunsigned int
longlong intsigned longsigned long int
unsigned longunsigned long int
浮動小数点数型
float
double
long double
オプションでサポートされる整数型
long longlong long intsigned long longsigned long long int
unsigned long longunsigned long long int

型のサイズと範囲

データ型のサイズと、入力できるデータの範囲はコンパイラとアーキテクチャ依存です。sizeof演算子を使用することでデータ型のサイズを知ることができます。結果はほとんどの場合はバイト数で表現されます。しかし、多くのアーキテクチャで実装されている、共通の標準的なデータ型のサイズというものがあります。intとfloatは多くの場合32ビット、charは8ビット、doubleは64ビットです。boolは多くの場合は8ビットのデータ型として実装されています。long long型は64ビットです。”cfloat”もしくは”float.h”というヘッダファイルでは浮動小数点数型の範囲を規定しています。整数型に関しては”climits”もしくは”limits.h”というヘッダファイルの中で規定されています。

数字型の限界値は<limits>ヘッダの中で定義されています。また、numeric_limitsテンプレートを使用すると、C++データ型の、システム依存の数値表現を取得することができるようになります。下記の表の適切な関数を選び、テンプレート引数に知りたいデータ型を設定します。ユーザ定義型に対するnumeric_limitsはオーバーロードできることに注意してください。

^メソッドもしくは
定数^返り値^説明^

is_specializedbool
radixint指数の底
digitsint仮数の基数の桁数
digits10int仮数の10進数の基数の桁数
is_signedbool
is_integerbool
is_exactbool
min()<type>負の数を除いて、表現できるもっとも小さい数値
max()<type>表現できるもっとも大きな数値
epsilon()<type>1と1より大きな最小の数の差(表現可能な最小の誤差)
round_error()<type>丸め誤差として取り得る最大の値
infinity()<type>あれば、無限大の表現を返す
quiet_NaN()<type>浮動小数点数エラーではないが、不正な値
signaling_NaN()<type>浮動小数点数エラーを表す、不正な値
denorm_min()<type>
min_exponentint
min_exponent10int
max_exponentint
max_exponent10int
has_infinitybool
has_quiet_NaNbool
has_signaling_NaNbool
has_denorm<type>_denorm_style
has_denorm_lossbool
is_iec559boolIEC-559規格に準拠しているか?
is_boundedbool
is_modulobool
trapsbool
tinyness_beforebool
round_style float_round_style列挙型 (訳注)丸め方の方法。GCCでは以下の5つが定義されています
round_indeterminate
round_toward_zero
round_to_nearest
round_toward_infinity
round_toward_neg_infinity

このテンプレートは主に、データ型が保持できる最大値と最小値の数値を見て、境界のチェックをするのに使用されます。下記のコードは、プログラムを実行しているシステムにおける、short型の最小値と最大値を表示します:

  #include <limits>
  std::cout << "Maximum short value: " << std::numeric_limits<short>::max() << std::endl;
  std::cout << "Minimum short value: " << std::numeric_limits<short>::min() << std::endl;

型宣言を読む

シンプルな型宣言を理解するのは簡単です:

  int i

しかし、以下のような複雑な型宣言を読み解くのは簡単ではありません:

  double **d[8]              // おや?
  char *(*(**foo [][8])())[] // うわ!fooって何だ!?

上記の宣言を理解するには以下の3つのルールを使用します:

  1. 変数名から見始めます。上記の例の場合は、dfooになります
  2. 最後にデータ型を見ます。上記の例の場合は、doublecharです
  3. 右側に見に行けるときは右に見ていきます。カッコがついていて左にしか行けない場合には左に見ていきます

サンプル:

表現意味
double **d[8];
double **d[8]; dはdouble型
double **d[8]; dはdouble型 を8個持つ配列
double **d[8]; dはdouble型を8個持つ配列 へのポインタ
double **d[8]; dはdouble型を8個持つ配列へのポインタ へのポインタ

もっと複雑な例:

表現意味
char *(*(**foo [][8])())[]
char *(*(**foo [][8])())[] fooはchar型
char *(*(**foo [][8])())[] fooはchar型 の配列
char *(*(**foo [][8])())[] fooはchar型の配列 を8個持つ配列
char *(*(**foo [][8])())[] fooはchar型の配列を8個持つ配列 へのポインタ
char *(*(**foo [][8])())[] fooはchar型の配列を8個持つ配列へのポインタ へのポインタ
char *(*(**foo [][8])())[] fooはchar型の配列を8個持つ配列へのポインタへのポインタ を返す関数
char *(*(**foo [][8])())[] fooはchar型の配列を8個持つ配列へのポインタへのポインタを返す関数 へのポインタ
char *(*(**foo [][8])())[] fooはchar型の配列を8個持つ配列へのポインタへのポインタを返す関数へのポインタ の配列
char *(*(**foo [][8])())[] fooはchar型の配列を8個持つ配列へのポインタへのポインタを返す関数へのポインタの配列 へのポインタ

もっと詳しく知りたい場合には、http://www.unixwiz.net/techtips/reading-cdecl.htmlにある、Steve Fried氏が書いた「どのようにCの宣言を読むか」というすばらしい説明を参照してみてください。

 
• • • SitemapRecent changesRSScc