본문 바로가기

전체 글139

Modern C++ : C-Style static function (98, 11) C-Style 정적 함수 (static function) 개요C-Style static 함수는 선언된 소스 파일 내에서만 접근할 수 있는 내부 연결(internal linkage)을 갖는 함수입니다. 즉, 다른 소스 파일에서는 이 함수를 호출할 수 없으며, 마치 해당 파일의 비공개(private) 헬퍼 함수처럼 동작합니다. 이를 통해 전역 이름 공간(global namespace)의 오염을 방지하고, 여러 파일에서 동일한 이름의 함수를 사용하더라도 이름 충돌(name collision)을 피할 수 있습니다. C++ 버전별 주요 키워드 도입 시기C++98 이전 (C언어로부터 계승): static 키워드를 사용하여 파일 범위의 함수와 변수에 내부 연결을 지정하는 기능은 C언어에서부터 존재했으며, C++ 초기.. 2025. 8. 8.
Modern C++ : static local variables (98, 11) 정적 지역 변수 : Static Local Variables 개요C++에서 함수 내부에 static 키워드를 사용하여 선언된 변수를 정적 지역 변수(Static Local Variable)라고 합니다. 이 변수는 일반적인 지역 변수와 달리, 프로그램이 시작될 때 생성되어 종료될 때까지 파괴되지 않으며, 함수 호출이 끝나도 그 값을 계속 유지합니다. C++ 버전별 주요 키워드 도입 시기C++98: static 키워드 자체는 C++ 초기 버전부터 존재했으며, 정적 지역 변수의 개념도 이때부터 사용되었습니다.C++11: 정적 지역 변수의 초기화가 스레드에 안전(thread-safe)하도록 보장되었습니다. 여러 스레드에서 동시에 해당 함수에 접근하더라도 변수는 정확히 한 번만 초기화됩니다. 내용 설명정적 지역 .. 2025. 8. 7.
Modern C++ : const vs constexpr (98, 11, 14, 17, 20) 상수와 상수 표현식 : const vs constexpr 개요C++에서 const와 constexpr는 모두 상수를 정의하는 데 사용되지만, 초기화 시점과 컴파일 타임 평가 여부에서 중요한 차이가 있습니다. const는 런타임에 초기화될 수 있는 읽기 전용 변수를 선언하는 반면, constexpr는 컴파일 타임에 값이 결정되는 진정한 의미의 상수를 선언하여 컴파일러 최적화와 타입 시스템에 더 많은 정보를 제공합니다. C++ 버전별 주요 키워드 도입 시기C++98: const 키워드를 사용하여 읽기 전용 변수를 선언했습니다.C++11: constexpr 키워드가 도입되어, 변수나 함수가 컴파일 타임에 평가될 수 있음을 명시적으로 나타낼 수 있게 되었습니다.C++14: constexpr 함수의 제약이 완화되.. 2025. 8. 6.
Modern C++ : type conversions (11, 14, 17, 20) 타입 변환 : type conversions 개요본 문서에서는 C++11 이후에 도입된 다양한 타입 변환 기능들을 한눈에 살펴보고, 각 기능의 사용법과 장단점을 제시합니다. C++ 버전별 주요 키워드 도입 시기C++11auto, Uniform Initialization ({})static_cast(명시적 변환) 강화C++14함수 반환형 autoC++17구조적 바인딩 (Structured Binding)C++20std::bit_cast (헤더 ) 내용 설명auto변수 선언 시 타입을 컴파일러가 추론코드 가독성 향상 및 복잡한 타입 축소Uniform Initialization중괄호 {} 를 사용해 초기화직접 리스트 초기화(direct list-init)에서 narrowing 금지 규칙 적용축소 변환 (nar.. 2025. 8. 5.
Modern C++ : designated initializers (20) 지정 이니셜라이저 : designated initializers 개요C++20부터 구조체와 배열 등에 지정 이니셜라이저를 사용하여 멤버 이름을 명시적으로 지정해 초기화할 수 있습니다.이를 통해 멤버 순서와 관계없이 원하는 멤버만 선택적으로 초기화할 수 있으며, 지정하지 않은 멤버는 기본값으로 초기화됩니다. C++ 버전별 주요 키워드 도입 시기C++20: P1008R1 제안에 따라 지정 이니셜라이저 도입 내용 설명구조체, 배열, 클래스 애그리게이트에 사용 가능.멤버 = 값 형식으로 초기화하며, 초기화 순서와 정의 순서는 무관지정하지 않은 멤버는 기본값(0 또는 디폴트 생성자)으로 초기화동일 멤버를 중복 지정 시 컴파일 에러 발생 예제 코드#include #include struct User { en.. 2025. 8. 4.
Modern C++ : enum concepts (11, 20) enum concepts개요C++20 Concept와 열거형(Enum)을 통합하여 타입 안전성과 가독성을 동시에 확보하는 방법을 설명합니다. C++ 버전별 주요 키워드 도입 시기C++11: enum classC++20: concept 내용 설명C++20에서 도입된 concept는 템플릿 타입 매개변수에 대한 제약 조건을 명시적으로 정의할 수 있습니다. 열거형 전용 EnumType concept를 정의하면, 템플릿 함수가 오직 열거형 타입만을 허용하도록 컴파일 타임에 검증합니다.#include #include // 열거형 타입 전용 Concepttemplateconcept EnumType = std::is_enum_v;// 열거형 값을 기본 정수형으로 변환하는 제네릭 함수templateconstexpr a.. 2025. 8. 3.
Modern C++ : enum vs enum class (98, 11) enum vs enum class 개요C++98의 전통적 enum과 C++11에서 도입된 enum class(Scoped enum)를 비교하여, 각 방식의 특징, 장단점 및 사용 시 유의점을 정리한다. C++ 버전별 주요 키워드 도입 시기C++98: enumC++11: enum class Name : UnderlyingType (기반 타입 지정) 내용 설명전통적 enum (C++98)암시적 정수 변환 허용 → 타입 안전성 부족열거자 이름이 전역 범위 오염 → 충돌 위험기반 타입 지정 불가 (기본 int)enum class (C++11)암시적 변환 금지 → 강한 타입 체킹열거자 Scoped → Color::RED 형태로 사용기반 타입 지정 가능 (enum class Color : uint8_t)static.. 2025. 8. 2.
Modern C++ 둘러보기 클래식 C++에 익숙해서 모던 C++ 변화 시기에 바닥에 뭍어두고 Rust 학습을 했었는데 흐릿해지니 충격도 줄어드는 것 같다.C++ 26에서 큰 변화가 있을거라는데, 메모리 안정성을 높인다니. 여전하다.그래도 20대 전후를 함께한 친구인데 언어 비교를 위해 다시 파내본다. Modern C++ Features (C++11, C++14, C++17, C++20, C++23)이 문서는 C++11부터 C++23까지 표준에 도입된 주요 언어 및 라이브러리 기능을 정리하고, 예제 코드를 통해 사용법을 설명합니다. 목차C++11auto 키워드범위 기반 for 문스마트 포인터 (std::unique_ptr, std::shared_ptr)nullptr람다 표현식이동 시맨틱 (rvalue 참조, std::move)기타:.. 2025. 8. 1.
배부르고 공감 능력이 부족한 사람과 함께. 배고프고 공감 능력이 부족한 사람.배고프고 공감 능력이 충분한 사람.배부르고 공감 능력이 부족한 사람.배부르고 공감 능력이 충분한 사람. 문득 이런 생각이 떠올랐다.이들은 뾰족하다. 어떻게 조화롭게 함께 살아갈 수 있을까? 배부르고 공감 능력이 부족한 사람. 이들은, - 남보다 우위에 서고 싶어하고 - 배부르면 더 이상 기본 욕구에 의한 자극이 없기 때문에, 더 강한 자극을 추구한다. (오락, 스릴, 감각적 만족, 쾌락, 도박, 사치, 과소비) - 사람, 조직, 자원 등을 지배하거나 소유하고자 하는 욕망이 크다. - 내가 원하는 대로 세계가 돌아가야 한다는 태도를 가진다. - 자신의 무관심이나 이기심을 정당화할 논리나 이념을 추구한다. (능력주의, 생존경쟁, 자유시장 논리) "나는 타인을 도와야 .. 2025. 6. 5.