프로그래밍 언어/C++ 썸네일형 리스트형 array-to-pointer conversion에 대해 conversion의 설계 개념 C++의 conversion를 정의할 때, 직교하는 3 요소, value category, cv-qualification, data representation를 설계 개념으로 사용한다. conversion를 설계할 때, 요소 중 하나만을 변형하고, 다른 요소를 변형하지 않는다. 어떤 이유로, 예를 들어 하위 호환성을 위해, 설계 개념을 위반할 때는 스펙 문서는 관련된 특수 조항을 별도로 명시한다. array-to-pointer conversion value category 요소를 변형하기 위해 설계한 conversion이다. value category 요소만 변경하기 때문에, exact match rank로 분류된다. 또한 일반적으로 cv-qualification이나 da.. 더보기 glvalue-to-prvalue conversion에 대해 conversion의 설계 개념 C++의 conversion를 정의할 때, 직교하는 3 요소, value category, cv-qualification, data representation를 설계 개념으로 사용한다. conversion를 설계할 때, 요소 중 하나만을 변형하고, 다른 요소를 변형하지 않는다. 어떤 이유로, 예를 들어 하위 호환성을 위해, 설계 개념을 위반할 때는 스펙 문서는 관련된 특수 조항을 별도로 명시한다. glvalue-to-prvalue conversion value category 요소를 변형하기 위해 설계한 conversion이다. value category 요소만 변경하기 때문에, exact match rank로 분류된다. 또한 일반적으로 cv-qualification이나 .. 더보기 semiregular concept [[semiregular]] concept 개요 copyable concept과 default_initializable concept를 만족하면 semiregular concept를 만족한다. - [[copyable]] concept - T a(b); // copy constructor - T a = b; // copy constructor - a = b; // assignment - [[default_initializable]] concept - T a; // default initialization - T{}; // direct-list initialization - T(); // value initialization == [[std::constructible_from]]import std; temp.. 더보기 standard conversion sequence standard conversion sequence 여러 종류의 standard conversion를 4 단계로 분류해서 standard conversion sequence라고 한다. standard conversion sequence의 각 단계마다 최대 하나의 standard conversion이 변환 연산에 참여할 수 있다. 따라서 최소 0개에서 최대 4개의 standard conversion이 연산에 참여할 수 있다. class type에 대한 변환 연산은 1차 standard conversion sequence → user-defined conversion → 2차 standard conversion sequence 순서로 변환 연산을 진행하는데, 이를 implicit conversion sequ.. 더보기 reference type, binding, related type, compatible type 본 게시글을 이해하는데 알고 있어야 할 정보 본 게시글은 reference 관련 용어를 설명한다. 편이상 원활한 진행을 위해, 이전 게시글에서 설명한 내용 일부를 다시 한번 언급한다. conversion 구현방법 conversion의 첫번째 구현방법은 변환하려는 대상을, 그대로 두고 관점만 바꾸는 변환이다. conversion의 두번째 구현방법은 새로 만든 목적 타입을, 소스 타입 정보로 덥혀쓰기하는 변환이 있다. 첫번째 방법으로 불가능한 모든 변환을 두번째 방법으로 구현 가능하다. 목적 타입에 소스 타입 정보를 덥혀쓰기하는 방법은 copy-initialization 방법과 direct-initialization 방법으로 구분된다. conversion의 세번째 구현방법은 메모리가 아닌 위치로 복사 변환한.. 더보기 포인터 타입 관련 용어: qualification-combined type, similar type 개요 C 언어의 포인터과 유사한 의미를 갖는 참조를 C++에서 도입했다. 이러한 이유로 포인터 관련 용어과 참조 관련 용어가 서로 결이 다르다. 본 게시글은 포인터 관련 용어를 중심으로 설명한다. 특히, similar type과 qualification-combinded type는 포인터과 관련된다. cv-qualifier 표기법 int const* volatile* const m1{ nullptr };m1 타입을 다음과 같이 cv-qualifier과 pointer으로 서로 대응하는 순서 집합으로 표현할 수 있다. cv-qualifier 순서 집합: ({const}, {volatile}, {const}) pointer 순서 집합: (int, int*, int**) 코딩 순서를 따라 *를 만나면, 체크하는.. 더보기 built-in operator를 통해 살펴보는 value category 설명에 앞서 게시글에서 설명이 다소 많아 원활한 진행을 위해 자주 등장하는 용어를 먼저 설명하겠다. cv-qualifier 표기법 이해 const과 volatile 키워드를 합해 cv라고 축약해 부른다. cv를 조합해 만들어진 구문을 cv-qualifier라고 한다. 결국, cv는 const volatile, const, volatile, non-cv 구문을 의미한다. 공집합을 포함한 cv로 조합할 수 있는 모든 경우를 의미한다. 예를 들어, vq는 cv-qualifier가 volatile이거나 non-cv 구문을 의미한다. 설명 과정에서 non-const로 언급한다. 예를 들어, cq는 cv-qualifier가 const이거나 non-cv 구문을 의미한다. 설명 과정에서 non-volatile로 언급한.. 더보기 value category의 서로 다른 유형간 변환 개요 computation expression에서 피연산자는 연산자에게 특정 value category 타입의 value를 요구한다. 연산자가 가지고 있는 value category와 요구 사항이 맞는다면, 문제없이 사용되지만, 다른 종류의 value category를 갖고 있다면, value category에 적용되는 conversion 규칙에 따라, 피연산자가 요구하는 value category 타입으로 변경하게 된다. 모든 value는 lvalue, xvalue, prvalue 중 하나다. 서로 다른 타입으로 변환은 8(2x2x2) 경우 수가 존재한다. 일부 변환은 암묵적으로 변환할 수 있고, 일부 변환은 명시적 구문을 사용해 변환할 수 있고, 일부 변환은 몇 단계를 거쳐 변환해야 한다. 스펙 문서.. 더보기 이전 1 2 3 다음