차례:
- 변환 UDL 개발
- #include using namespace std; struct MyType {MyType (double input) : 값 (입력) {} double 값;}; {UDLType = 145. 6_mytype; cout << ulType; value << endl; return 0;}
- 부작용
비디오: [전체 다시보기] 나만의 첫 번째 C++ 애플리케이션 완성하기 with C++빌더 2024
표준 라이브러리와 내장 기능 C ++에서는 재미있는 리터럴 배열을 제공합니다. 그러나 리터럴의 진정한 가치는 자신을 만들 때 더욱 분명 해집니다.
UDL (User-Defined Literals)을 사용하여 여러 가지 요구 사항을 해결할 수 있지만 일반적인 코딩 문제없이 데이터 변환을 지원하고 사용자 정의 유형을보다 쉽게 사용할 수 있으며 원하는 부작용을 얻는 것이 일반적입니다.
내장 또는 표준 라이브러리 리터럴은 접두사 및 접미어 형식으로 제공되지만 자체 리터럴을 정의 할 때만 접미사 형식을 만들 수 있습니다. 또한 접미사는 밑줄로 시작해야합니다. 밑줄은 기존 접미어와의 충돌을 방지하고 다른 개발자가 리터럴이 사용자 정의 (비표준) 형식임을 알도록 돕는 데 도움이됩니다.
변환 UDL 개발
UDL 내에 변환을 캡슐화 할 수 있습니다. 이러한 UDL을 작성한 후에해야 할 일은 원하는 결과를 얻기 위해 상수를 정의 할 때 적절한 접미사를 제공하는 것입니다. CustomUDL01 예제는 반경 입력을 상수의 원 영역으로 변경하는 변환을 정의하는 기술을 보여줍니다.
#include using namespace std; constexpr long double 연산자 "_circ (긴 이중 반지름) {반환 반지름 * 반지름 * 3. 141592;} int main () {double x = 5. 0_circ; cout <<"원의 영역은 "<< x << endl; return 0;}
UDL을 생성하기 위해 예제에서는 long double의 반환 값과 long double의 입력 값 인 radius를 사용하는 constexpr을 사용합니다. 원의 면적을 계산하는 방정식 이 예제에서는 constexpr의 일부로 올바른 계산을 수행합니다.
원의 면적은 78입니다. 5398
사용자 정의 유형 UDL 개발
만남은 이해하기 어렵고 이해하기 어려운 맞춤 유형에 의존합니다.코드를 단순화하기 위해 UDL을 생성하면 더 명확 해지고 오류 가능성이 줄어 듭니다. CustomUDL02 예제에는 UDL을 작성하는 데 사용되는 사용자 정의 유형, 연산자 및 UDL을 사용하여 리터럴을 정의하는 방법이 표시됩니다.
#include using namespace std; struct MyType {MyType (double input): 값 (입력) {} double 값;}; {UDLType = 145. 6_mytype; cout << ulType; value << endl; return 0;}
이렇게하려면 다음을 수행하십시오. 기법을 사용하려면 유형을 구성하는 데 필요한 입력 수를 허용하는 유형의 생성자를 작성해야합니다. 최소한 생성자는 하나의 유형을 허용해야하며 그렇지 않으면 사용자가 입력 한 값이 손실됩니다.
사용자 정의 유형은 연산자에서 요구하는 것과 같은 크기의 데이터 형식을 지원하지 않지만 같은 종류 여야합니다. 예를 들어, long double을 int로 변환 할 수 없습니다.
이 예제를 실행하면 출력이 표시됩니다 값은 사용자 정의 유형에 입력 한 값인 145.6입니다.이 방법을 사용하면 상당히 복잡한 설정을 처리 할 수 있습니다. 사용자 정의 유형의 사용자는 명확한 코드 작성 기능을 사용하여 쉽게 이해하고 해석 할 수 있습니다. 기본 유형은 복잡합니다.
부작용으로 맞춤 UDL 사용
가장 흥미로운 요소 중 하나입니다. UDL의 목적은
부작용
(응용 프로그램을 더 짧고 효율적으로 만들거나 유연성을 높이기 위해 평소 또는 일반 작업 이외의 작업)을 만드는 것입니다. 리터럴을 정의한 결과로 발생하는 특정 작업을 정의하려고합니다. 당신이 얻는 것은 여전히 문자 적이지만, 나중에 사용할 값을 반드시 의미하지는 않는 문자 그대로입니다. CustomUDL03 예제는 비 전통적 용도 중 하나를 보여줍니다. #include using namespace std; int main () {10_countdown; return 0;}
void 연산자 "_countdown (unsigned long long 값) {for (int i = 값; i> = 0; i--) _countdown 연산자는 일반적으로 값과 연결되는 것에 연결되지 않으며 실제로 값을 반환하지는 않습니다. 대신에 얻은 결과는 부작용입니다.이 예제를 실행하면 이 출력을보십시오.
10 9 8 7 6 5 4 3 2 1 0
컴파일러가 10_countdown을 루프의 각 반복마다 하나씩 개별 cout 문으로 대체했습니다. 10과 0 사이의 값을 역순으로 출력하는 11 개의 cout 문 부작용 UDL은 반복적 인 작업을 간소화하여 코드를 작성하는 데 유용한 모든 가능성을 열어줍니다.