Integer literal
整数型の値を式内で直接使用できるようにします。
目次構文整数リテラルは以下の形式を持ちます
ここで
整数リテラル(あらゆるリテラルと同様に)は 一次式 です。 説明
1)
10進整数リテラル (基数 10)。
2)
8進整数リテラル(基数8)。
3)
16進整数リテラル(基数16、文字
'a'
から
'f'
までが(10進数で)10から15の値を表します)。
4)
バイナリ整数リテラル(基数2)。
整数リテラルの最初の桁が最上位桁です。 例。以下の変数は同じ値に初期化されます: int d = 42; int o = 052; int x = 0x2a; int X = 0X2A; int b = 0b101010; // C++14 例。以下の変数も同じ値に初期化されます: unsigned long long l1 = 18446744073709550592ull; // C++11 unsigned long long l2 = 18'446'744'073'709'550'592llu; // C++14 unsigned long long l3 = 1844'6744'0737'0955'0592uLL; // C++14 unsigned long long l4 = 184467'440737'0'95505'92LLU; // C++14 リテラルの型整数リテラルの型は、値が収まる最初の型であり、使用された数値基数と整数サフィックスに依存する型のリストから選択される。
整数リテラルの値がを持たないサイズサフィックス(C++23以降)が、サフィックス/基数の組み合わせで許可されたどの型にも収まらず、かつコンパイラが拡張整数型(例えば 注記
整数リテラル内の文字は大文字小文字を区別しません:
負の整数リテラルは存在しません。 - 1 のような式は、リテラルが表す値に 単項マイナス演算子 を適用しており、暗黙の型変換が行われる可能性があります。 C99以前のC言語では(ただしC++では除く)、サフィックスなしの10進数値で long int に収まらない値は unsigned long int 型を持つことが許可されています。
maximal munch
の規則により、16進整数リテラルが
auto x = 0xE+2.0; // エラー auto y = 0xa+2.0; // OK auto z = 0xE +2.0; // OK auto q = (0xE)+2.0; // OK それ以外の場合、単一の無効なプリプロセス番号トークンが形成され、それ以降の解析が失敗します。
例
このコードを実行
#include <cstddef> #include <iostream> #include <type_traits> int main() { std::cout << 123 << '\n' << 0123 << '\n' << 0x123 << '\n' << 0b10 << '\n' << 12345678901234567890ull << '\n' << 12345678901234567890u << '\n'; // 型は unsigned long long // long long サフィックスがなくても // std::cout << -9223372036854775808 << '\n'; // エラー: 値 // 9223372036854775808 は符号付き long long に収まらない // これはサフィックスなし10進整数リテラルで許可される最大の型 std::cout << -9223372036854775808u << '\n'; // 単項マイナスが符号なし値に // 適用され、2^64から減算される。これにより 9223372036854775808 が得られる std::cout << -9223372036854775807 - 1 << '\n'; // 値 -9223372036854775808 を // 計算する正しい方法 #if __cpp_size_t_suffix >= 202011L // C++23 static_assert(std::is_same_v<decltype(0UZ), std::size_t>); static_assert(std::is_same_v<decltype(0Z), std::make_signed_t<std::size_t>>); #endif } 出力: 123 83 291 2 12345678901234567890 12345678901234567890 9223372036854775808 -9223372036854775808 不具合報告以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
参考文献
関連項目
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||