【C++】リテラルとは?数値、文字、文字列などの定数の書き方を徹底解説

目次

はじめに

C++でプログラムを書く際、私たちは様々な「値」を直接コードに記述します。これらの、ソースコード上に直接表現される固定値のことをリテラルと呼びます。

C++には、扱うデータの種類に応じて、様々なリテラルの記述方法が用意されています。この記事では、C++の主要なリテラルの種類と、その正しい書き方を網羅的に解説します。


1. 整数リテラル

整数値を表します。10(10進数)、0xFF(16進数)、0b1010(2進数、C++14以降)のように記述できます。

int decimal_val = 42;
int hex_val = 0x2A;    // 16進数 (42)
int octal_val = 052;   // 8進数 (42)
int binary_val = 0b101010; // 2進数 (42) (C++14)

// C++14以降、桁区切り文字 (') が使える
long long large_number = 1'000'000'000;

2. 浮動小数点数リテラル

3.14double型)や 1.23ffloat型)のように、小数点数や指数(6.02e23)を含む数値を表します。

double pi = 3.14159;
float gravity = 9.8f; // fサフィックスでfloat型
long double avogadro = 6.022e23L; // Lサフィックスでlong double型

3. 文字リテラル

'A' のように、単一の文字をシングルクォーテーションで囲んで表現します。内部的には整数値として扱われます。

char initial = 'C';
char newline = '\n'; // 改行などの特殊文字(エスケープシーケンス)

4. 文字列リテラル

"Hello" のように、ダブルクォーテーションで囲まれた文字の並びを表します。

通常の文字列リテラル

const char* message = "Hello, World!\n";
// 隣接する文字列リテラルは、コンパイル時に自動で連結される
const char* long_message = "This is a "
                           "very long message.";

生文字列リテラル (Raw String Literal)

R"(...)" という構文で、\などのエスケープシーケンスを無効にし、書いたままの文字列を表現できます。正規表現やWindowsのパスを記述する際に非常に便利です。

// 通常: "C:\\Users\\Taro"
// Raw: R"(C:\Users\Taro)"
const char* win_path = R"(C:\Users\Taro)";

5. 論理値リテラル

bool型の値 truefalse を表します。

bool is_ready = true;
bool has_error = false;

6. ポインタリテラル

NULLポインタを表すためのリテラルです。C++11以降、0NULLマクロの代わりに nullptr を使うことが強く推奨されます。

int* p1 = nullptr;
char* p2 = nullptr;

7. ユーザー定義リテラル

C++11以降、プログラマが独自のリテラルを定義できるようになりました。数値や文字列リテラルの後ろに、_で始まるカスタムサフィックスを付けると、対応する演算子オーバーロードが呼び出されます。

サンプルコード

#include <iostream>

// "km" というサフィックスで、メートルに変換するユーザー定義リテラル
constexpr long double operator"" _km(long double val) {
    return val * 1000;
}

int main() {
    // 10.5_km は、operator"" _km(10.5L) の呼び出しに変換される
    long double meters = 10.5_km; 
    
    std::cout << "10.5km は " << meters << "メートルです。" << std::endl;
    return 0;
}

解説: 10.5_km という記述が、コンパイル時に operator"" _km(10.5L) という関数呼び出しに置き換えられます。これにより、単位などをより直感的にコードで表現できます。


まとめ

今回は、C++の主要なリテラルの種類について網羅的に解説しました。これらのリテラルを正しく使い分けることで、意図が明確で、型安全なコードを記述することができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次