본문 바로가기

Language/C++23

Variant 초기화의 중요성 bad_variant_access Std::Variant는 C++ 17에서 지원하는 공용체이다. 공용체란 한 인스턴스에 다양한 타입의 값을 담을 수 있는 구조체를 의미한다. 공용체라면 가장 쉽게 접할 수 있는게 명시적인 Union 일텐데, 현재 Std::Variant는 Value와 함께 저장된 값의 유형을 식별하는 판별자를 관리하기 때문에 공용체를 구현하는데 보다 안정적인 방법으로 선호되고 있다. (기존의 Union의 경우 타입을 판별하지 않기때문에 논리 오류로 이어질 수 있다는 단점이 존재한다.) * Variant의 이용방법은 다음과 같다. https://en.cppreference.com/w/cpp/utility/variant std::variant - cppreference.com template class variant; (sin.. 2022. 6. 3.
상수 멤버함수의 설계 방법 멤버 함수에 붙는 const 키워드의 역할은 해당 멤버 함수가 상수 객체 대해 호출될 함수라는 사실을 의미한다. 이러한 함수는 먼저 클래스의 인터페이스를 이해하기 좋게하기 위해 사용되며, 두 번째로 이 키워드를 통해 상수 객체를 사용할 수 있게 하기위함이다. cosnt 키워드가 있고 없고의 차이만 있는 멤버 함수들은 오버로딩이 가능하다. 오버로드를해서 각 버전마다 반환 타입을 다르게 가져간다면 상수 객체와 비상수 객체의 쓰임새를 다르게 가져갈 수 있다. class TextBlock { public: const char& operator[](std::size_t position) const { return text[position]; } char& operator (std::size_t poisition).. 2022. 3. 2.
참조 전달 문법 std::move, std::forward https://dev-record.tistory.com/62?category=956403 이동생성자와 보편참조법(universal ref) https://dev-record.tistory.com/56?category=956403 lvalue와 rvalue + 우측값 참조법 * lvalue와 rvalue란? C++ 내에서 모든 식들은 카테고리라는 부가적인 정보를 포함하고 있다. l-value와 r-value가 이에 해.. dev-record.tistory.com 지난 포스팅에서 rvalue와 보편축약 등에 대해 정리해보았다. 이번 포스팅은 이를 응용한 forward 함수의 사용에 대해 알아본다. 지금까지 정리한 내용은 다음과 같다. c++에서 참조는 &와 &&으로 표현된다. &는 lvalue 참조를 의미하.. 2022. 1. 13.
이동생성자와 보편참조법(universal ref) https://dev-record.tistory.com/56?category=956403 lvalue와 rvalue + 우측값 참조법 * lvalue와 rvalue란? C++ 내에서 모든 식들은 카테고리라는 부가적인 정보를 포함하고 있다. l-value와 r-value가 이에 해당되는데, lvalue는 읽고 대입할 수 있는 값, 식(expression)에서 좌측에 존재하기에 dev-record.tistory.com 지난 포스팅 '우측값 참조법'이후의 공부 내용이다. 이번 포스팅에서는 rvalue 참조와 관련된 추가 내용을 정리한다. 이동생성자 (rvalue) 이동생성자는 앞서 말한 복사생략 (copy ellision)을 수행하기 위해 정의하는 생성자이다. 지난 포스팅에서는 실체가 없는 rvalue와 이를.. 2022. 1. 7.