본문 바로가기

개발163

Modern C++ : std::Attributes (11, 14, 17, 20) std::Attributes 개요C++ Attributes는 코드에 메타데이터를 추가하는 표준화된 방법을 제공합니다. 이 메타데이터는 컴파일러가 경고를 생성하거나, 코드를 최적화하거나, 특정 규칙을 강제하는 데 사용될 수 있습니다. 속성은 [[attribute]] 구문을 사용하여 지정됩니다. C++ 버전별 주요 키워드 도입 시기C++11: [[noreturn]], [[carries_dependency]]C++14: [[deprecated]]C++17: [[fallthrough]], [[nodiscard]], [[maybe_unused]]C++20: [[likely]], [[unlikely]], [[no_unique_address]] 내용 설명[[nodiscard]]: 함수의 반환 값을 무시해서는 안 됨을.. 2025. 10. 10.
Modern C++ : std::any (17) std::any 개요std::any는 C++17부터 도입된 기능으로, 모든 타입의 값을 안전하게 저장하고 추출할 수 있는 타입 안전(type-safe) 컨테이너입니다. 특정 타입에 국한되지 않고 다양한 타입의 객체를 하나의 변수에 담아야 할 때 유용하게 사용됩니다. C++ 버전별 주요 키워드 도입 시기C++17: std::any가 표준 라이브러리에 처음 도입되었습니다. 내용 설명std::any는 내부에 어떤 타입의 값이든 저장할 수 있는 클래스 템플릿입니다. void*처럼 타입을 완전히 잃어버리는 것과 달리, std::any는 저장된 값의 타입을 기억하고 있어 타입 안전성을 보장합니다.주요 멤버 함수는 다음과 같습니다.any_cast(): std::any 객체에 저장된 값을 특정 타입 T로 캐스팅하여 반.. 2025. 9. 30.
Modern C++ : std::variant (17) std::variant 개요std::variant는 타입 안전(type-safe) 공용체(union)로, C++17 표준 라이브러리에 추가된 기능입니다. 주어진 여러 타입 중 하나의 값을 가질 수 있으며, 현재 어떤 타입의 값을 저장하고 있는지 항상 기억합니다. 기존 C 스타일 공용체와 달리 타입 정보가 없어 발생할 수 있는 오류를 컴파일 또는 런타임에 방지할 수 있습니다. C++ 버전별 주요 키워드 도입 시기C++17: std::variant가 처음 도입되었습니다. 내용 설명std::variant는 템플릿 인자로 명시된 타입들 중 하나의 인스턴스만 저장할 수 있는 컨테이너입니다. 예를 들어 std::variant은 int, double, std::string 중 하나의 값만 가질 수 있습니다.주요 기능.. 2025. 9. 29.
Modern C++ : std::optional (17) std::optional 개요std::optional은 C++17부터 도입된 기능으로, 값이 있을 수도 있고 없을 수도 있는 상황을 명시적으로 표현하는 데 사용되는 템플릿 클래스입니다. 함수가 유효한 값을 반환하지 못하는 경우, 이전에는 nullptr나 특별한 값(예: -1)을 반환하여 실패를 알렸습니다. std::optional은 이러한 상황을 더 안전하고 명확하게 처리할 수 있는 방법을 제공합니다. C++ 버전별 주요 키워드 도입 시기C++17: std::optional 도입 내용 설명std::optional 객체는 타입 T의 값을 포함하거나, 아무 값도 포함하지 않는 두 가지 상태를 가질 수 있습니다. 값이 없는 상태는 std::nullopt를 사용하여 표현합니다.주요 멤버 함수는 다음과 같습니다... 2025. 9. 28.
Modern C++ : Type Traits 2 (11, 14, 17, 20) Type Traits 2개요타입 특성(Type Traits)은 컴파일 시간에 타입에 대한 정보를 얻거나 타입을 변환하는 데 사용되는 템플릿 기반의 메커니즘입니다. 헤더에 정의된 클래스 템플릿들을 통해, 특정 타입이 정수형인지, 포인터인지, 혹은 두 타입이 동일한지 등을 확인할 수 있습니다. 이를 활용하면 템플릿 프로그래밍에서 타입에 따른 조건부 컴파일, static_assert를 이용한 타입 제약, 오버로드 해석 제어(SFINAE) 등을 효과적으로 구현할 수 있습니다.C++ 버전별 주요 키워드 도입 시기C++11: 헤더와 함께 대부분의 핵심 타입 특성들이 도입되었습니다. (std::is_same, std::is_integral, std::enable_if, std::conditional 등)C++14.. 2025. 9. 27.
Modern C++ : Variadic Templates and Fold Expressions (11, 17) Variadic Templates and Fold Expressions 개요C++에서 템플릿은 강력한 제네릭 프로그래밍 도구입니다. Variadic Templates는 임의의 개수의 템플릿 인자를 받을 수 있게 하여 템플릿의 유연성을 극대화합니다. 이를 통해 printf와 같이 가변 인자를 받는 함수를 타입에 안전하게 구현할 수 있습니다.Fold Expressions는 C++17부터 도입된 기능으로, Variadic Template의 파라미터 팩(parameter pack)을 매우 간결하고 직관적인 방식으로 처리할 수 있게 해주는 구문입니다.이 문서에서는 Variadic Templates의 기본 개념과 재귀를 이용한 고전적인 처리 방식, 그리고 C++17의 Fold Expressions를 활용한 현대적인.. 2025. 9. 26.
Modern C++ : std::concepts (20) std::concepts 개요C++ Concepts는 템플릿 파라미터에 대한 제약 조건을 명시적으로 표현하는 기능입니다. 템플릿이 특정 요구사항(예: 특정 멤버 함수나 연산자를 지원)을 만족하는 타입에 대해서만 인스턴스화되도록 강제할 수 있습니다. 이를 통해 컴파일 타임에 타입 요구사항을 검증하고, 의도에 맞지 않는 타입이 사용될 경우 훨씬 명확하고 이해하기 쉬운 에러 메시지를 생성할 수 있습니다. C++ 버전별 주요 키워드 도입 시기C++20: concept, requires 키워드가 도입되어 Concepts 기능이 표준으로 채택되었습니다. 내용 설명Concepts는 concept 키워드를 사용하여 정의하며, requires 절을 통해 템플릿 파라미터가 만족해야 할 제약 조건을 기술합니다. 여러 Con.. 2025. 9. 25.
Modern C++ : Type Traits 1 (11, 14, 17, 20) Type Traits 1 개요Type traits는 C++ 템플릿 메타프로그래밍의 핵심 기능 중 하나로, 컴파일 시간에 타입에 대한 정보를 질의하거나 타입을 변환하는 데 사용되는 템플릿 클래스 집합입니다. 헤더 파일에 정의되어 있으며, 이를 통해 코드의 유연성과 안정성을 크게 향상시킬 수 있습니다.주요 용도는 다음과 같습니다.타입 검사: 특정 타입이 정수형, 부동소수점형, 클래스 등 특정 카테고리에 속하는지 확인합니다.타입 속성 확인: 타입이 const 한정자를 가졌는지, 포인터인지 등을 확인합니다.타입 관계 확인: 두 타입이 동일한지, 한 타입이 다른 타입으로 변환 가능한지 등을 확인합니다.타입 변환: 타입에 const를 추가하거나 포인터를 제거하는 등의 변환을 수행합니다.특히 static_asser.. 2025. 9. 24.
Modern C++ : 템플릿 특수화 (Template Specialization) (98, 11, 17) 템플릿 특수화 (Template Specialization) 개요템플릿 특수화(Template Specialization)는 특정 타입에 대해 일반적인 템플릿 구현과 다르게 동작하는 특별한 버전을 제공하는 C++ 기능입니다. 이를 통해 특정 타입에 최적화되거나 특별한 동작을 수행하는 코드를 작성할 수 있습니다. 예를 들어, 일반 템플릿 함수가 모든 타입에 대해 동일한 로직을 수행하지만, 특정 타입(예: std::string)에 대해서는 다른 로직을 수행해야 할 때 유용하게 사용됩니다. C++ 버전별 주요 키워드 도입 시기C++98: 템플릿(Template) 개념과 함께 템플릿 특수화(Template Specialization)가 표준에 도입되었습니다.C++11: extern template 키워드가 도입.. 2025. 9. 23.