본문 바로가기

프로그래밍 언어

function과 value category 이해하기 개요 computation expression에 참여하는 모든 피연산자에 요구하는 value category는 function로 명시한다. 함수를 통해 value category를 명시하는 기본 규칙 int a, b; /*...*/ a + b;피연산자 a, b에 요구되는 value category는 + 연산자 함수를 통해 제어한다. primitive type에 대한 연산자 함수를 built-in operator function이라 부르고, 스펙 문서의 [over.built] 섹션에서 설명한 내용에 따라 구현 컴파일러가 구현을 일반 함수처럼 제공한다. function overload resolution 과정을 거쳐 최종적으로 호출할 함수를 결정하는 과정 역시 일반 함수과 같다. // L 과 R는 float.. 더보기
value category 이해하는 첫 단추 개요 C++ 언어의 statement는 크게 declaration statement과 expression statement로 구분한다. declaration statement는 새로운 name를 도입하고, 해당 이름을 어떻게 앞으로 해석해야 할지 명시하는 구문이다. expression statement는 앞서 선언한 name를 사용해서 일반적으로 computation를 명시하는 statement다. lambda expression는 명시적으로 declaration statement 구문없이 expression statement를 구성한다. declaration statement 과정이 없음으로 새로운 name을 추가하지 않고 곧바로 expression statement를 구성한다. 프로그래머에게 type.. 더보기
range-based for 구문 이해하기 range-based for 구문 스펙 문서에서 range-based for 구문을 명시한 내용은 다음과 같고, 등가 구문을 연이어 언급한다. 이후로 등가 구문 중심으로 설명하고, 해당 등가 구문이 작동하면, range-based for 구문이 정상적으로 작동함을 알려준다. 실제 구현 컴파일러도 동일하게 등가 구문으로 range-based for 구문을 구현한다. 이러한 이유로 본 게시글도 등가 구문을 중심으로 설명한다. for ( init-statementopt for-range-declaration : for-range-initializer ) statement// 등가 구문 { init-statementopt auto &&range = for-range-initializer ; auto begin .. 더보기
프로그램 종료 과정 이해하기 non-main 쓰레드가 초기 호출 함수에서 벗어나면 새로운 쓰레드가 초기 호출 함수에서 벗어나면 std::exit 함수가 역시 호출되고, std::exit 함수 내부에서 쓰레드 실행 과정에서 정상적인 과정을 거쳐 생성된 thread storage duration 객체의 소멸자가 호출된다. main 쓰레드가 main 함수에서 벗어나면 main 함수를 벗어나면, 가장 먼저 main 함수의 반환값을 argument로 std::exit 함수를 호출한다. std::exit 함수 내부에서 정상적인 과정을 거쳐 생성된 static storage duration 객체 생성 시점 또는 std::atexit 함수로 등록한 함수를 전체적으로 시간 순서로 배열한 역순으로 소멸자나 등록 함수를 번걸아 호출 완료한다. thre.. 더보기
C++의 main 함수에 대해 execution environment C++ 프로그램이 구동되는 실행 환경을 C++ 스펙에서는 크게 OS의 subsystem 환경하에서 구동하는 hosted environment과 독자적으로 실행하는 freestanding environment으로 구분한다. hosted environment 실행 환경 요구 사항이 freestanding environment 실행 환경 요구 사항을 포함한다. 따라서 C++ 스펙은 hosted environment 실행 환경 요구 사항 기준으로 설명하고, 일부 요구 사항을 무효화함으로써 freestanding environment 실행 환경 요구 사항을 완성한다. hosted environment 실행 환경 요구 사항을 준수한 C++ 컴파일러를 hosted impleme.. 더보기