1-06. 定数・リテラル

公開日: 16:52 1. 基本編/1-06. 定数・リテラル

定数はプログラムによって変更されない固定値を指し、リテラルと呼ばれます。

定数は基本的なデータ型に使用でき、整数、浮動小数、文字、文字列、真偽値に分類することができます。

繰り返しますが、定数は定義後に値を変更できないことを除いて通常の変数のように扱われます。

整数リテラル(Integer literals)

整数リテラルは10進数、8進数、16進数を扱え、接頭辞は底や基数指定し、0xや0Xは8進数、0は16進数、何もつけないのは10進数となります。

また、整数リテラルはUとLを組み合わせである接尾辞(サフィックス)を持つことができ、それぞれunsignedとlongを示します。

整数リテラルの例を示します。

212         // 有効
215u        // 有効
0xFeeL      // 有効
078         // 無効 8は8進数で使えない
032UU       // 無効 接尾辞を繰り返してはならない

次の例は様々な形の整数リテラルです。


85         // 10進数
0213       // 8進数
0x4b       // 16進数
30         // 整数
30u        // unsigned int
30l        // long
30ul       // unsigned long

浮動小数点リテラル(Floating-point literals)

浮動小数点リテラルは整数部と小数点、小数部、指数部を持ちます。小数点形式と指数形式で浮動小数点リテラルを表現することができます。

小数点形式を使って表現する場合、少数点、指数、またはその両方を含める必要があり、指数形式を使う場合、整数部、小数部、またはその両方を含める必要があります。符号付き指数はeまたはEによって表現されます。

浮動小数点リテラルの使用例を示します。
3.14159       // 有効
314159E-5L    // 有効
510E          // エラー: 指数部がない
210f          // エラー: 小数点または指数部がない
.e55          // エラー: 整数部または少数部がない

真偽リテラル(Boolean literals)

真偽リテラルには2種類あり、C++標準キーワードに含まれます。
  • 真を表す値はtrue 
  • 義を表す値はfalse 
となっています。 trueの値が1と等しい、またはfalseの値が0と等しいかは考慮する必要はありません。

文字リテラル(Character literals)

文字リテラルはシングルクォート(')で囲まれています。リテラルがLで始まっている場合(例 L'x')、ワイド文字リテラルであり、wchar_t型の変数に格納する必要があります。それ以外の場合は、厳格な文字リテラル(例 'x')であり、char型の変数に格納されます。

文字リテラルにはそのままの文字('x')、エスケープシーケンス('\t')、ユニバーサル文字('\u02c0')があります。 C++において、バックスラッシュ(\)をつけている文字は特別な意味を持ち、改行(\n)、タブ文字(\t)などを表します。

エスケープシーケンスを使った例を示します。

エスケープシーケンス意味
\\\文字
\''文字
\""文字
\??文字
\a警告音
\bバックスペース
\fNULL
\n改行
\rキャリッジリターン、行の先頭にカーソルを戻す
\t水平タブ
\v垂直タブ
\ooo3つの数字からなる8進数
\xhh1つ以上の整数なる16進数

次にエスケープシーケンスを使ったサンプルを示します。
#include <iostream>
using namespace std;

int main()
{
   cout << "Hello\tWorld\n\n";
   return 0;
}
上のコードをコンパイルし実行すると、次の結果が返ってきます。

Hello World

文字列リテラル(String literals)

文字列リテラルはダブルクォート(")で囲まれています。文字列は文字リテラルのような文字、そのままの文字、エスケープシーケンス、ユニバーサル文字を含みます。

文字リテラルを使い空白で分割することで、長い行を複数行に分離することができます。

次の例は文字リテラルのサンプルです。3つの形式は同一の文字列です。
"hello, dear"
"hello, \
dear"
"hello, " "d" "ear"

定数の定義

C++において定数を定義するには2つの方法があります。
  • #defineプリプロセッサの使用
  • constキーワードの使用

#defineプリプロセッサ

次の構文は#defineプリプロセッサを使って定数を定義します。
#define 識別子 値

次に実例をつかって説明します。
#include <iostream>
using namespace std;

#define LENGTH 10   
#define WIDTH  5
#define NEWLINE '\n'

int main()
{

   int area;  
   
   area = LENGTH * WIDTH;
   cout << area;
   cout << NEWLINE;
   return 0;
}
上のコードをコンパイルし実行すると、次の結果が返ってきます。
50

constキーワード

接頭辞constを使うことで指定した型の定数を定義することができます。
const 型 variable = value;
次に実例を示します。
#include <iostream>
using namespace std;

int main()
{
   const int  LENGTH = 10;
   const int  WIDTH  = 5;
   const char NEWLINE = '\n';
   int area;  
   
   area = LENGTH * WIDTH;
   cout << area;
   cout << NEWLINE;
   return 0;
}
上のコードをコンパイルし実行すると、次の結果が返ってきます。 50 大文字で定数を定義することはプログラミングの良い習慣です。ソースコードを読む人にとって定数であることが明示されるからです。
  • ?±??G???g???[?d????u?b?N?}?[?N???A

0 件のコメント :

コメントを投稿