C++でのユーザー定義リテラル
ここでは、C++でのユーザー定義リテラルの概念を説明します。 C ++バージョン11から、ユーザー定義リテラル(UDL)がC++に追加されました。 C ++は、さまざまな組み込み型のリテラルも提供しますが、これらは制限されています。
組み込みリテラル-
-
31(整数)
-
3.5(ダブル)
-
4.2F(フロート)
-
'p'(文字)
-
31ULL(Unsigned Long Long)
-
0xD0(符号なし16進整数)
-
"pq"(文字列)
組み込みのリテラルとは別に、ユーザー定義のリテラルが必要になる場合があります。その背後にあるいくつかの理由があります。いくつかの例で見てみましょう-
1つの重み変数を定義したいが、次のように定義する場合のように、単位を指定できないとします-
long double Weight = 3.5;
単位(ポンド?、キログラム?グラム?)についてはわかりませんが、UDLを使用すると、値を使用して単位を付加できます。いくつかの利点があり、コードが読みやすくなり、コンパイル時の変換もサポートされます
weight = 5.6kg; ratio = 5.6kg/2.1lb;
上記の比率を見つけるには、それらを同じ単位に変換する必要があります。しかし、UDLは、ユニットの翻訳コストを克服するのに役立ちます。この場合、ユーザー定義型の場合はユーザー定義リテラルを定義し、組み込み型の場合は新しい形式のリテラルを定義できます。 UDLはコーディング時間を大幅に節約することはできませんが、実行速度が速いため、より多くの計算をコンパイル時にシフトできます。
例
理解を深めるために、次の実装を見てみましょう-
#include<iostream> #include<iomanip> using namespace std; unsigned long long int operator"" _kb( unsigned long long int x ) { return x*1024; } unsigned long long int operator"" _b( unsigned long long int x ) { return x; } unsigned long long int operator"" _mb( unsigned long long int x ) { return x * 1024 * 1024; } int main() { unsigned long long int size = 24_kb; cout << "Size:" << size << endl; cout << "Few more MB:" << ( size + 2_mb ) << endl; cout << "Size Div:" <<( 10_kb / 2_kb ) << endl; cout << "1KB = " <<( 8_b * 128_b ) << endl; return 0; }
出力
Size:24576 Few more MB:2121728 Size Div:5 1KB = 1024
-
C++でのトークンと識別子とキーワード
トークンは、コンパイラにとって意味のあるC++プログラムの最小要素です。 C ++パーサーは、識別子、キーワード、リテラル、演算子、句読点、その他の区切り文字などの種類のトークンを認識します。これらのトークンのストリームは、翻訳ユニットを構成します。トークンは通常、空白で区切られます。 パーサーは、キーワード、識別子、リテラル、演算子、および句読点を認識します。前処理トークン(#include、#define、#if_defなど)は、コンパイラに渡されるトークンストリームを生成するために前処理フェーズで使用されます。前処理トークンのカテゴリは、ヘッダー名、識別子、前処理番号、文字リテラル、文字
-
C ++トークンとはどういう意味ですか?
トークンは、コンパイラにとって意味のあるC++プログラムの最小要素です。 C ++パーサーは、識別子、キーワード、リテラル、演算子、句読点、およびその他の区切り文字などの種類のトークンを認識します。これらのトークンのストリームは、翻訳ユニットを構成します。トークンは通常、空白で区切られます。 パーサーは、キーワード、識別子、リテラル、演算子、および句読点を認識します。前処理トークン(#include、#define、#if_defなど)は、コンパイラに渡されるトークンストリームを生成するために前処理フェーズで使用されます。前処理トークンのカテゴリは、ヘッダー名、識別子、前処理番号、文字リテラ