C++
 Computer >> コンピューター >  >> プログラミング >> C++

なぜC/C++では修飾子を使うのか?データ型修飾子の基礎をわかりやすく解説

修飾子(モディファイア)とは何か?

修飾子(modifier)とは、基本となるデータ型の意味を変更し、プログラムの要件に合わせてふるまいを調整するためのキーワードです。

たとえば「時間」を表す変数を考えてみましょう。時間がマイナスになることは論理的にあり得ないため、負の値を扱えない unsigned(符号なし)として宣言するのが自然です。このように、修飾子を使うことでメモリの使い方や表現できる値の範囲を、用途に応じて最適化できるのです。

C++で使える4つのデータ型修飾子

C++では、charintdouble といったデータ型の前に修飾子を付けることができます。主な修飾子は以下の4つです。

  • signed … 符号付き(正・負の両方の値を扱える)
  • unsigned … 符号なし(0以上の値のみ扱える)
  • long … 値の範囲を拡張する
  • short … 値の範囲を縮小し、メモリを節約する

それぞれの修飾子が適用できる型

signedunsignedlongshort の4つの修飾子は、すべて整数型(int系)の基本型に適用可能です。

さらに、以下のような組み合わせも許されています。

  • char 型には signedunsigned を付けられる
  • double 型には long を付けられる(例:long double

また、signedunsigned は、longshort 修飾子と組み合わせて使うこともできます。

組み合わせの例

unsigned long int a;  // 符号なし長整数として宣言

覚えておきたい省略記法

C++には、unsignedshortlong の整数を宣言するときに使える省略記法が用意されています。int を省略しても、暗黙的に int が指定されたものとみなされるのです。

つまり、以下の2つの宣言は完全に同じ意味になります。

unsigned long a;      // int を省略した書き方
unsigned long int a;  // 上の行と同じ意味

この省略記法を活用すれば、より簡潔で読みやすいコードを書くことができます。ただし、チーム開発ではコーディング規約に合わせて書き方を統一することをおすすめします。

  1. C++にrestrict(制限)修飾子は存在しない?その理由と最適化への活用方法

    C++の言語仕様に「restrict」キーワードはない結論から言うと、C++には「restrict」というキーワードは存在しません。C++の予約語(キーワード)の一覧は、C++言語規格のセクション2.11/1に定義されていますが、そこにrestrictは含まれていません。restrictはC99で導入されたC言語のキーワードであり、C++の標準規格には採用されていないのです。restrict修飾子とは何かC言語において、restrict修飾されたポインタ(または参照)とは、コンパイラに対する一種の「約束」です。具体的には、そのポインタが有効なスコープ内では、ポインタが指す対象のオブジェクトには

  2. C++でvolatile(揮発性)修飾子を使う理由とは?2つの重要な意味をわかりやすく解説

    C++におけるvolatile修飾子には、主に次の2つの重要な意味があります。これらを正しく理解することで、組み込み開発などでvolatileを適切に使いこなせるようになります。 volatileが持つ2つの意味 1. 変数の値はコード外の要因で変化する可能性がある volatile付きの変数は、プログラマが書いたコードによって変更していなくても、ハードウェアやOSなどの外部要因によって値が変わる可能性があります。そのため、コンパイラはこの変数の値を読み取るたびに、「前回読み取った値と同じだろう」「最後に格納した値のままだろう」といった仮定をすることができません。必ずその都度、実際にメモリ