본문 바로가기

# Lang/Modern C++

(18)
# Lang/Modern C++ 6.4 균일된 초기화 방식 균일된 초기화 방식 (Uniform Initialization)어떤 상황이든 변수를 초기화 할 때, 중괄호 초기화를 사용할 수 있음을 보장한다.즉, 일관성 있게 중괄호 초기화을 모든 상황에 적용할 수 있다.일반변수 초기화 (vairable)멤버변수 초기화 (member variable)상수변수 초기화 (const vairable)정적변수 초기화 (static variable)참조변수 초기화 (reference variable)구조체 초기화 (implicitly initialize objects)암묵적 함수 인자값 초기화 (implicitly initailize function parameter)암묵적 함수 리턴값 초기화 (implicitly initailize objects to return) 균일된 초..

2019. 5. 7. 21:57

# Lang/Modern C++ 6.3 이니셜라이져 리스트 이니셜라이져 리스트 (Initializer_list)여러개의 요소들을 하나의 리스트에 넣어서 생성자에 넘김. (since C++11)이 때, 해당 요소들은 전부 동일한 타입이어야 함. 내부적으로 std::initializer_list 라는 자료형에 담겨서 전송됨.즉, 해당 초기화 방식을 사용하려면 std::initializer_list를 인자로 받는 생성자가 있어야 함. example 1 : std::initializer_list list = {1, 2, 3}; vector v1{list};// v1 [1, 2, 3], call vector(initializer_list) vector v2(list);// v2 [1, 2, 3], call vector(initializer_list) vector v3{1..

2019. 5. 4. 22:26

# Lang/Modern C++ 6.2 중괄호 리스트 초기화 중괄호 초기화, 소괄호 초기화관점에 따라 초기화 정책이 바뀐다 :어떤 괄호를 사용했는가? (소괄호, 중괄호)괄호 안에 인자의 수는 몇개인가? (0개, 1개, 2개 이상) 사례 구분 :인자없는 소괄호 : value initializaiton인자없는 중괄호 : value initialization단일인자 소괄호 : direct initialization단일인자 중괄호 : direct initialization다중인자 소괄호 : direct initialization다중인자 중괄호 : aggregate initialization 서론 : 여러개의 인자를 다룰 때에는,소괄호 초기화와 중괄호 초기화의 차이점을 알아야 한다. 집합 초기화 (Aggregate initialization)다중인자를 다루는 중괄호 초기화..

2019. 4. 30. 13:38

# Lang/Modern C++ 6.1 로컬변수 초기화 기본 초기화 (default initalization)아무것도 하지 않는 초기화.어떤 초기화도 진행하지 않았을 때 발생한다. 발생 사례 :T object;new T;아무것도 하지 않는 것이 표준이기 때문에,기본 초기화를 진행한 변수는 쓰레기값을 갖게된다. 발생 사례 해석 :이름 유무에 관계없이 (auto, static, thread-local) 스토리지로 선언되었고, 어떠한 초기화도 사용하지 않은 경우. 복사 초기화 (copy initialization)다른 오브젝트의 값을 복사하여 초기화. 발생 사례 :T object = other;T array[N] = { other };throw exception and catchpass arguments when call by valuereturn expressi..

2019. 4. 22. 19:25

# Lang/Modern C++ 5.2 완벽한 전달 1. 보편참조 (universal reference)보편참조는 템플릿에서만 사용할 수 있다. 모든 참조를 가르킬 수 있어, 각 참조의 모든 경우를 하나의 케이스로 받을 수 있으므로,유연한 템플릿 함수의 설계가 가능하다. 모양새는 우측값 참조지만, universal 참조로 번역된다.늬앙스가 다르므로 주의. 2. 참조겹침 규칙 (reference collapsing) 레퍼런스 겹침 법칙 (참조 캐스팅 법칙)(A&)&becomes A&(A&)&&becomes A&(A&&)&becomes A&(A&&)&&becomes A&& 보편참조를 우측값 참조로 캐스팅하면,보편참조가 어떤 참조형식을 받았는지 알아낼 수 있다. 3. 완벽한 전달 (perfect forwarding)보편참조가 받은 참조형식을 손상시키지 않고, ..

2019. 4. 19. 23:24

# Lang/Modern C++ 5.1 이동 의미론 1. 값의 이동데이터의 소유권을 옮기는 것.포인터를 옮기고, 원본 데이터를 nullptr로 교체하는 것으로 구현한다. 2. 복사 생성자 (copy constructor)복사를 통하여, 같은내용의 새로운 객체를 만드는 생성자.아래 두 객체의 data는 내용은 같지만, 주소는 다르다. 3. 이동 생성자 (move constructor)이동을 통하여, 같은내용의 새로운 객체를 만드는 생성자. 소유권이 변경되어야 하므로, 원본 객체의 데이터는 사라졌지만.데이터를 그대로 사용했으므로, 주소는 변하지 않는다. 4. 임시객체 이동 생성자 (rvalue reference move constructor)우측값은 임시객체의 특징을 갖는다.내용을 복사하는 것 보단, 이동시키는 것이 낫다. 5. 좌측값, 우측값 이동 생성자이..

2019. 4. 18. 21:41

# Lang/Modern C++ 4.3 우측값 참조 (rvalue reference) 선행 지식 : 4.2 값의 유형 (glvalue, prvalue, xvalue)값의 유형 (Value Category) 값의 분류기준 : have identity? 값이 식별성을 갖고 있는가? can be moved from? 값이 메모리에서 이동할 수 있는가? 기본적인 분류단위를 Primary Category라고 하고, 두 개 이상..aerocode.net 1. 우측값 참조변수 (rvalue reference variable) prvalue 또는 xvalue 값을 참조하는 변수. 일반 참조는 선언문에서 lvalue를 요구하지만, // 좌측값 참조.우측값 참조는 rvalue를 요구한다. example : int val = 3; int &l_ref = val; // OK. val은 lvalue. int &..

2019. 4. 16. 23:52

# Lang/Modern C++ 4.2 값의 유형 (glvalue, prvalue, xvalue) 값의 유형 (Value Category)값의 분류기준 :have identity? 값이 식별성을 갖고 있는가?can be moved from? 값이 메모리에서 이동할 수 있는가? 기본적인 분류단위를 Primary Category라고 하고,두 개 이상의 복합분류를 Mixed Category라고 한다. Primary Categories :xvaluelvalueprvalue Mixed Categories :rvalue (xvalue + prvalue)glvalue (xvalue + lvalue) Have Identity? (glvalue)값이 식별성을 갖고 있는가? 공간의 성질을 가지고 있는 값의 통칭.데이터를 저장할 수 있는 메모리의 위치정보이다. Can be moved from? (rvalue) 메모리에서..

2019. 4. 11. 23:52