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

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

  1. C++でのトークンと識別子とキーワード

    トークンは、コンパイラにとって意味のあるC++プログラムの最小要素です。 C ++パーサーは、識別子、キーワード、リテラル、演算子、句読点、その他の区切り文字などの種類のトークンを認識します。これらのトークンのストリームは、翻訳ユニットを構成します。トークンは通常、空白で区切られます。 パーサーは、キーワード、識別子、リテラル、演算子、および句読点を認識します。前処理トークン(#include、#define、#if_defなど)は、コンパイラに渡されるトークンストリームを生成するために前処理フェーズで使用されます。前処理トークンのカテゴリは、ヘッダー名、識別子、前処理番号、文字リテラル、文字

  2. C ++トークンとはどういう意味ですか?

    トークンは、コンパイラにとって意味のあるC++プログラムの最小要素です。 C ++パーサーは、識別子、キーワード、リテラル、演算子、句読点、およびその他の区切り文字などの種類のトークンを認識します。これらのトークンのストリームは、翻訳ユニットを構成します。トークンは通常、空白で区切られます。 パーサーは、キーワード、識別子、リテラル、演算子、および句読点を認識します。前処理トークン(#include、#define、#if_defなど)は、コンパイラに渡されるトークンストリームを生成するために前処理フェーズで使用されます。前処理トークンのカテゴリは、ヘッダー名、識別子、前処理番号、文字リテラ