본문 바로가기

NC University37

5일차 - initializer_list Intro  initializer_list는 동일 타입의 요소를 여러 개 보관하는 타입(정확히는 템플릿)이다. 언뜻 생각해보면 이는 vector와 유사하며, interface도 큰 차이를 보이지 않는다. 차이점은 차후에 살펴보기로 하고, 우선 아래 코드를 통해 int 타입을 저장하는 initializer_list를 생성하고 사용하는 것을 살펴보자.#include using namespace std;int main(int argc, char* argv[]){ initializer_list e = { 1,2,3,4,5 }; cout ::iterator p = e.begin(); while (p != e.end()) { cout initializer_list와 함수인자  기존 C+.. 2015. 8. 5.
4일차 - 객체의 field 초기화 (field initializer) field initializer  예전 C++ 98에서는 유일하게 클래스 안에서 필드를 초기화가 가능했던 문법은 static const 뿐이었다. 하지만 C++ 11부터는 이러한 제약이 사라졌기 때문에 아래와 같은 필드 초기화가 가능해졌다.#include using namespace std;class A{ int n{ 0 }; //  static const를 이용한 초기화는 여전히 이용가능하다. 그리고 (1)~(3)은 동일한 필드에 대한 초기화가 적용되는 순서이다. field initializer의 값이 가장 먼저 적용받으며, 생성자 내에서의 대입이 있을 경우는 이 값이 객체 생성시 해당 필드의 초기값이 된다. 2015. 8. 4.
4일차 - 일관된 초기화 (uniform initialization) 기존의 객체 초기화  아래 코드는 기존 C++에서 여러 타입의 객체들을 초기화하는 코드이다.#include #include using namespace std;struct Point { int x, y; };int main(int argc, char* argv[]){ int n1 = 0; int n2(0); int x[10] = { 1,2,3,4,5,6,7,8,9,10 }; Point p = { 1, 1 }; complex c(1,2); return 0;}uniform initialization  모든 종류의 객체를 동일한 방식으로 초기화하자는 컨셉. 위의 코드와 비교해보자.int n1{ 0 };int n2{ 0 };int x[10]{ 1,2,3,4,5,6,7,8,.. 2015. 8. 4.
4일차 - nullptr Intro  C언어에서는 포인터 변수가 가리키는 주소가 없을 경우에 NULL을 사용했다. 그리고 C++에서도 11로 넘어오기 전에는 C와 같이 NULL을 사용했었다. 그런데 이 NULL의 정체를 살펴보면 정수값 '0'을 이용해서 정의하고 있다. 그렇기 때문에 아래 코드에 나온 것 처럼 0을 이용해서 포인터 변수를 초기화하거나 함수에 포인터 인자를 넘길때 0을 사용할 수 있다.#include using namespace std;void foo (int a) { cout    위의 코드를 보면 NULL이 정상적으로 동작하려면 (void*)0으로 정의되어야 할 것처럼 보인다. 이는 같은 이름의 함수가 하나는 정수 타입의 인자를, 다른 하나는 포인터 인자를 받도록 정의되어 있을 경우에 NULL이 0으로 정의되었.. 2015. 8. 3.