Architecturas | c++ optional 예제

c++ optional 예제

선택 사항으로 더 나아가려면 선택적 선택적 쿼리에 대한 게시물을 살펴보고 선택적 함수 인수로 선택적 을 사용하는 구체적인 예를 보여 주어 명확하고 정확한 인터페이스를 제공하기 위해 « 설정되지 않음 »의미 체계를 활용하십시오. 다음은 선택 사항으로 수행할 수 있는 작업의 간단한 예입니다. 센티넬의 명백한 선택이 없고 모든 표현 가능한 값을 전달할 수 있기를 원할 때 는 그다지 좋지 않습니다. 이 경우, 일반적인 방법은 선택적 매개 변수가 유효한 값을 보유하고 있는지 여부를 나타내는 별도의 부울을 사용하는 것입니다 : 나는 우리가 유형을 사용해야 할 때 요약 부스트 옵션에서 설명을 좋아 : 언제든지 당신은 표현하는 도구가 필요합니다  » 값 또는 값이 아님 », 또는 « 아마도 대답 », 또는 « 지연된 초기화가 있는 객체 »는 std::optional을 위해 도구 상자에 도달해야 합니다. 이러한 경우 어휘 유형을 사용하면 추상화 수준이 높아지므로 다른 사용자가 코드의 작업을 쉽게 이해할 수 있습니다. 선언은 선택사항 f(); 및 void g(선택사항); 쌍보다 더 명확하고 간결하게 의도를 표현한다 f(); 또는 보이드 g(Tt, bool is_valid);) 단어의 경우와 마찬가지로, 형식의 우리의 어휘에 추가하는 것은 단순히 복잡한 문제를 설명하는 우리의 능력을 증가 – 그것은 우리가 더 효율적으로. 개념적으로 표준 라이브러리의 버전은 선택적 구현할 수 있습니다: 선택적 것은 지연된 초기화 자체에 적합하기 때문에 지연된 초기화 문제에 특히 적합합니다. 포함된 T는 시공시, 또는 언젠가 나중에 초기화될 수 있거나, 그렇지 않을 수 있다. 포함된 T는 선택 사항이 소멸될 때 파기해야 합니다. 선택 사항의 디자이너는 이미이 맥락에서 발생하는 대부분의 질문에 대답했습니다. std::선택 은 편리 하 고, 조금, 하지만 강력한 라이브러리 기능. 다음에 « 아무것도 »에 대한 마법의 값이 무엇인지 알아 내려고 할 때 std::optional을 기억하십시오. std:::선택 사항으로 메모리 사용량이 증가하여 비용을 지불하게 됩니다.

하나 이상의 추가 바이트가 필요합니다. std:::선택 사항의 사용에 대해 무서운 것을 발견 : > 구조형 opt_int {std:::선택적 값;}; –> 크기==8 > 구조체 opt_int2 {int v;bool v_defined;}; –> 크기==8 > 구조체 opt_int3 {std::선택적 값; std::선택적 값2;}; –> 크기==16 > 구조체 opt_int4 {int v;int v2;bool v_defined;bool v2_defined}; -> 크기==12 그래서 더 std:::선택 사항 구조체 당 사용, 덜 컴팩트 내 구조체가 될 것입니다. std::선택 사항으로 인해 나를 위해 사용할 수 없습니다. -1 또는 «  »와 같은 기본값이 광범위하게 사용되는 레거시 코드가 많고 동시에 모든 값을 변경하지 않으려는 경우 코드의 가장 중요한 부분을 선택 사항으로 바꾸고 나머지는 변경하지 않고 그대로 둘 수 있습니다. 여기서 함수는 컬렉션에서 대상 값을 실제로 찾을 것을 보장할 수 없습니다. 선택 사항으로 반환 유형으로 컬렉션에서 실제 위치를 반환할 수도 또는 반환하지 않을 수도 있음을 표현합니다. 이를 위해 get_value_or (단순히 value_or C++17의 std:::optional) 메서드를 사용하여 두 메서드를 브리지합니다. 선택적 개체가 비어 있는 것으로 판명되면 값을 가져와 반환합니다.

예를 들어, 다음 레거시 함수를 고려해 봅시다: 이 구조에 대 한 한 가지 의견이 있었다: « 그리고 어떤 표준 라이브러리는 이 방법으로 선택적 구현할 수 있습니다 (그들은 공용 구조교를 사용 해야, constexpr 때문에). ». 따라서 위의 코드는 실제 구현이 아닌 예제를 표시하는 것입니다. 위의 문제에 대한 C ++17의 해결책은 std:::선택 사항입니다. 선택 사항 현재 개체가 아닌 것 또는 저장할 때 발생하는 문제를 직접 해결합니다. 선택적 값을 실제 T 값으로 초기화하거나 기본 초기화(또는 std::nullopt로 초기화)하여 « 빈 » 상태로 만들 수 있습니다. 선택 사항 T의 주문 작업 <, <, <=, <== – 빈 선택 사항이 T를 포함하는 선택적 옵션보다 작게 비교되므로 T인 것처럼 일부 컨텍스트에서 사용할 수 있습니다.