본문 바로가기

Program Language/c++35

c++ 기초(타입 추론 : auto & decltype) c++ 에는 타입을 추론할 수 있는 편리한 키워드가 있습니다. 바로 auto와 decltype 키워드입니다. 이번 장에서는 이 두 키워드에 관해서 정리하겠습니다. auto 키워드 변수를 선언할 때 타입 자리에 auto 대신 사용하면 컴파일 시간에 그 변수의 타입을 자동으로 추론합니다. 예를 들면 다음과 같습니다 auto x = 10; //x의 타입은 int로 추론된다. 사실 위 예제처럼 간단한 타입은 auto를 쓰면 별다른 이점은 없습니다. 하지만 다음과 같이 복잡하고 긴 이름을 가진 타입을 보면 어떤 이점이 있는지 바로 알아차릴 수 있을 겁니다. std::vector vecValue = Function(); 위의 타입을 auto로 대체하면 다음과 같이 간단하게 쓸 수 있습니다. auto vecValue.. 2023. 1. 19.
c++ 기초(레퍼런스) c++에서는 변수에 또 다른 별명(alias)을 부여할 수 있습니다. 이를 일컬어 레퍼런스(Reference, 참조)라고 부릅니다. 내부적으로는 포인터처럼 취급해서 포인터의 장점을 가지고 있으면서 외부적으로는 일반 변수처럼 취급해 가독성이 좋으며 편리합니다. 이번 장에서는 이런 레퍼런스의 특징에 대해서 정리해 보겠습니다. 레퍼런스 먼저 레퍼런스를 선언하는 방식부터 알아보겠습니다. 레퍼런스를 선언하기 위해서는 변수 앞에 &를 붙이고 다른 변수를 대입하면 됩니다. 예를 들면 다음과 같습니다. int value = 10; int& ref = value; ref 변수는 value 변수의 레퍼런스가 됩니다. 두 개의 변수가 모두 같은 값을 가리키기 때문에 둘 중 하나만 변경해도 다른 변수의 값도 동일하게 바뀝니다.. 2023. 1. 17.
c++ 기초 (const 키워드의 사용법) 이번 장에서는 c++을 사용하시면서 위치에 따라 그 의미가 많이 헷갈리는 const 키워드의 사용법에 대해서 정리하고자 합니다. const의 예외 규칙 const의 적용 규칙은 매우 간단합니다. 항상 const 키워드가 있는 위치에서 왼쪽 대상에 적용됩니다. 규칙이 이렇게 간단한데도 불구하고 사람들이 헷갈리는 이유가 바로 예외 규칙 때문입니다. 다음 예제를 보시면 흔히 쓰는 변수 값에 const를 선언하는 방식입니다. const int value = 10; 규칙대로라면 다음과 같이 int 다음 const가 나와야 합니다. 그래야 왼쪽에 위치하는 int에 적용할 수 있기 때문입니다. int const value = 10; 이것이 가능한 이유는 첫 번째 const는 구문 맨 처음에 놓여도 된다는 예외 규칙이.. 2023. 1. 16.
c++ 기초(스마트 포인터) 이글은 "전문가를 위한 c++(개정4판)"을 학습한 내용을 직접 실습해보며 정리한 Review용 글입니다. 스마트 포인터 스마트 포인터는 delete나 delete[]를 사용할 필요가 없이 자동으로 메모리를 해제 시킵니다. c++에서 가장 중요한 스마트 포인터 타입은 다음 두 가지입니다. #include std::unique_ptr std::shared_ptr unique_ptr은 가리키는 객체를 일반 포인터로 가리킬 수 없을 뿐만 아니라 동일 타입의 unique_ptr로도 가리킬 수 없습니다. 이는 복사생성자와 대입연산자가 구현이 되어 있지 않기 때문입니다. unique_ptr의 생성할 때는 두 가지 방법이 있습니다. #include #include //스마트 포인터 사용을 위해 using namesp.. 2023. 1. 13.
c++ 기초(동적 배열 할당) 이글은 "전문가를 위한 c++(개정4판)"을 학습한 내용을 직접 실습해보며 정리한 Review용 글입니다. 동적 배열 할당 용량이 큰 배열같은 경우 보통 힙에 동적 할당을 합니다. 이 때 new 연산자와 []를 사용합니다. int arraySizeX = 1000; int arraySizeY = 1000; long arraySize = arraySizeX * arraySizeY; int* myArrayBuffer = new int[arraySize]; 이렇게 하면 int타입 원소에 대해 arraySize로 지정한 개수만큼 힙 메모리가 할당됩니다. 그리고 myArrayBuffer에는 배열에 대한 주소의 시작값이 스택메모리에 할당됩니다. 힙메모리에 배열을 할당한 후 사용한 뒤에는 반드시 배열을 힙에서 제거해야.. 2023. 1. 13.
c++ 기초(포인터 사용법) 이글은 "전문가를 위한 c++(개정4판)"을 학습한 내용을 직접 실습해보며 정리한 Review용 글입니다. 포인터(Pointer) 힙에 데이터를 저장하려면 포인터를 선언해야합니다. 포인터 선언 방법은 아래와 같이 타입 바로 뒤에 별표(*)를 붙입니다. int* myIntegerPointer; 위 포인터의 의미는 myIntegerPointer의 변수는 int타입의 메모리 주소를 가리킨다라는 뜻입니다. 즉 myIntegerPointer변수 안에는 데이터가 들어 있는 힙메모리 주소값이 들어가게됩니다. 그렇다면 int*로 선언한 변수의 크기와 int로 선언한 변수의 크기는 다를까요? 그래서 테스트를 해봤습니다. #include using namespace std; int main() { int myInteger.. 2023. 1. 12.