전체 글보기
[C++ 1.1.13] 구조적 바인딩(auto)
구조적 바인딩 C++17부터 구조적 바인딩이란 개념이 도입됐다. 구조적 바인딩을 이용하면 여러 개의 변수를 선언할 때 배열, 구조체, 페어 또는 튜플의 값으로 초기화할 수 있다. 페어는 원소가 두 개인 순서쌍이고, 튜플은 원소가 n개인 순서쌍이다. 예를 들어 다음과 같이 배열이 정의되어 있다고 하자 std::array values = { 11, 22, 33 }; 이 상태에서 x, y, z란 변수를 선언할 때 각각 앞에 나온 values 배열에 담긴 값으로 초기화할 수 있다. 구조적 바인딩을 적용하려면 auto 키워드를 붙여야 한다. 예로 auto 자리에 int를 지정하면 안된다. auto [x, y, z] = values; 구조적 바인딩에서는 왼쪽에 나온 선언할 변수 개수와 오른쪽에 나온 표현식 값 개수..
[C++ 1.1.12] std::vector, push_back()
std::vector C++ 표준 라이브러리에서는 저장 공간의 크기가 고정되지 않는 컨테이너를 제공한다. 대표적으로 헤더 파일에 선언된 std::vector가 있다. vector는 C 스타일의 배열을 대체할 수 있는 것으로 훨씬 유연하고 안전하다. 프로그래머가 메모리 관리를 신경 쓸 필요도 없다. 메모리를 충분히 확보하는 작업은 vector가 알아서 처리하기 때문이다. vecgtor는 동적으로 실행 시간에 원소를 추가하거나 삭제할 수 있다. 다음 코드는 vector의 기본 기능을 보여준다. #include #include using namespace std; int main() { // 정수 타입 벡터를 생성한다. vector myVector = { 11, 22 }; // push_back()을 이용하여..
[C++ 1.1.11] std::array
std::array 앞 절에서 설명한 배열은 C 언어에서 사용하던 것이다. C++에서 그대로 사용해도 되지만 C++에서는 std::array라는 고정 크기 컨테이너를 제공한다. 이 타입은 헤더 파일에 정의돼 있다. std::array는 C 스타일 배열에 비해 여러 장점이 있다. 크기를 정확히 알 수 있고, 자동으로 포인터를 캐스팅(동적 형변환)하지 않아서 특정한 종류의 버그를 방지할 수 있고, 반복자(이터레이터)로 배열에 원소에 대한 반복문을 쉽게 작성할 수 있다. 다음 예제는 array 컨테이너를 사용하는 방법이다. #include #include using namespace std; int main() { array arr = { 9, 8, 7 }; cout
[C++ 1.1.10] C 스타일 배열, 영 초기화, 이니셜라이저 리스트, std::size(), sizeof
배열 배열은 같은 타입의 값을 나란히 저장하며, 각 항목은 배열에 놓인 위치로 접근한다. C++에서 배열을 선언할 때는 반드시 배열의 크기를 지정해야 하는데, 변수로 지정할 수는 없고 반드시 상수 또는 상수 표현식으로 지정해야 한다. 예를 들어 정수 값을 세 개 가진 배열을 선언하려면 다음과 같이 작성한다. int myArray[3]; myArray[0] = 0; myArray[1] = 0; myArray[2] = 0; C++에서 배열의 첫 번째 원소의 위치는 1이 아닌 0이다. 또한 배열의 마지막 원소의 위치는 항상 배열의 크기에서 1을 뺀 값이다. 영 초기화 다음과 같이 영 초기화(제로 초기화) 구문으로 한 번에 초기화하는 방법도 있다. int myArray[3] = {0}; 여기서 0은 생략해도 된..
[C++ 1.1.9] 함수, 함수 선언, 함수 정의, 함수 리턴 타입 추론(auto), 현재 함수 이름(__func__)
함수 코드를 모두 main() 안에 담으면 관리하기가 힘들어진다. 프로그램의 가독성을 높이려면 함수 단위로 간결하게 나눠서 작성해야 한다. C++에서 함수를 사용하려면 반드시 사용하려는 위치보다 앞에 선언해야 한다. 특정한 파일 안에서만 사용할 함수는 선언과 구현(정의)을 모두 소스 파일 안에 작성한다. 함수 선언 함수를 선언하는 문장을 함수 프로토타입(함수 원형) 또는 함수 헤더라 부른다. 함수의 내용은 보지 않고, 그 함수에 접근하는 방식만 표현한다는 의미가 강하다. 함수의 리턴 타입을 제외한 함수 이름과 매개변수 목록을 함수 시그니처(함수 서명)라고 부른다. 다음 코드는 함수를 선언하는 방법이다. void myFunction(int i, char c); 리턴 타입을 void로 지정했는데, 이 함수는..
[C++ 1.1.8] 논리 연산자(<, <=, >, >=, ==, !=, !, &&, ||), 단락 논리
논리 연산자 if (a > b)에서 > 연산자가 바로 논리 연산자이다. 이 연산자는 두 값을 비교해서 왼쪽 값이 오른쪽 값보다 크면 '참'이란 결과를 낸다. 다른 논리 연산자도 모두 이 패턴에 따라 최종 결과는 true나 false가 된다. = 왼쪽 값이 오른쪽 값보다 작은지(=) 비교한다. if (i < 0) { std::cout