目次:
- 変換UDLの開発
- #include using namespace std;構造体MyType {MyType(double input):値(入力){} double値;}; (自動UDLType = 145. 6_mytype; cout << ulType;値<< endl; return 0;}
- (アプリケーションをより短く効率的にするか、または柔軟性を高めるために、通常の操作または通常の操作以外の操作)を作成することです。リテラルを定義した結果として実行される特定の種類の操作を定義する必要があります。
ビデオ: Calculation of support reactions of a two support beam | ISopromat 2024
標準ライブラリは、 C ++の、リテラルの興味深い配列を提供します。しかし、独自のリテラルを作成すると、リテラルの真の価値がより明確になります。
ユーザー定義リテラル(UDL)を使用してさまざまなニーズに対処することができますが、データ変換をサポートし、カスタム・タイプを扱いやすくし、
<! - 1 - >ビルトインまたは標準ライブラリリテラルは接頭辞と接尾辞の両方の形式で提供されますが、独自のリテラルを定義するときにのみ接尾辞書式を作成できます。さらに、接尾辞はアンダースコアで始まる必要があります。アンダースコアは、既存のサフィックスとの競合を防ぎ、リテラルがカスタム(非標準)形式であることを他の開発者に知らせるのに役立ちます。
変換UDLの開発
<! - 2 - >UDL内でコンバージョンをカプセル化することは可能です。このようなUDLを作成したら、必要なのは、定数を定義するときに適切な接尾辞を付けて、必要な結果を得るだけです。 CustomUDL01の例では、半径入力を定数内の円の領域に変更する変換を定義する手法を示しています。
#include using namespace std; constexpr long double演算子 "_circ(long double radius){戻り半径* radius * 3。141592;} int main(){double x = 5. 0_circ; cout <<"円の領域は "<< x << endl; return 0;}
UDLを作成するには、戻り値がlong double、入力値radius(long double)を持つconstexprを使用します。円の面積を計算する式 <! - 3 - > カスタムUDLを作成するたびに、コンパイラは、コンパイル時に、これは、浮動小数点リテラルにはlong doubleを使用し、整数リテラルにはunsigned long longを使用する必要があることを意味します。後で小さなタイプを使用することを選択した場合でも、たとえば、xをdoubleと宣言することによって、リテラル自体が最大の可能な型を使用する必要があります。
新しい型のUDLを宣言するために、_circサフィックスを使用するxを作成し、画面上に結果が表示されます。この例を実行すると、次のように正しい値がxに配置されていることがわかります。円の面積は78です。5398
カスタムタイプUDLの開発
出会いは、理解しにくいカスタムタイプに依存しています。コードを簡素化するためにUDLを作成すると、事柄がより明確になり、エラーの可能性が少なくなります。 CustomUDL02の例には、カスタムタイプ、UDLの作成に使用される演算子、およびUDLを使用してリテラルを定義する方法が示されています。
#include using namespace std;構造体MyType {MyType(double input):値(入力){} double値;}; (自動UDLType = 145. 6_mytype; cout << ulType;値<< endl; return 0;}
このためには、メソッドが機能するには、型を構成するために必要な入力数を受け入れる型のコンストラクタを作成する必要があります。コンストラクタは最低でも1つの型を受け入れる必要があります。同じサイズのデータ型をサポートしていませんが、同じ種類のものでなければなりません(例:long doubleをintに変換できない場合)
この例を実行すると、あなたがカスタムタイプに入力した値である145.6という値です。このアプローチを使用すると、かなり複雑な設定を扱うことができます。カスタムタイプのユーザは、明確なコードを作成して、基本的なタイプは複雑です。
副作用のためのカスタムUDLの使用
最も興味深いものの1つUDLのための副作用は、
副作用
(アプリケーションをより短く効率的にするか、または柔軟性を高めるために、通常の操作または通常の操作以外の操作)を作成することです。リテラルを定義した結果として実行される特定の種類の操作を定義する必要があります。
あなたはまだリテラルですが、後で使用する予定の値を必ずしも意味しないリテラルです。 CustomUDL03の例は、非伝統的な使い方を示しています。 #include using namespace std; (int i = Value; i> = 0; i--)cout << i << endl;} int main(){10_countdown; return 0;} void演算子 "_countdown(unsigned long long値) _countdown演算子は、通常は値に関連付けられているものには付けられていないことに注意してください。実際には値を返しません。この出力を参照してください。
10 9 8 7 6 5 4 3 2 1 0
コンパイラが10_countdownを個々のcout文に置き換えています。副作用UDLは、特定の反復タスクを簡単に使用できるようにコードを作成するためのあらゆる種類の興味深い可能性を開きます。