💻프로그래밍 내용 정리
[C++ 1.2.4] 레퍼런스, Const 레퍼런스
레퍼런스란? C++에서 제공하는 레퍼런스(참조)를 사용하면 기존 변수에 새 이름을 지정할 수 있다. int x = 42; int& xReference = x; 변수의 타입 뒤에 &를 붙이면 그 변수는 레퍼런스가 된다. 일반 변수와 같지만 내부적으로는 원본 변수에 대한 포인터로 취급한다. 일반 변수 x와 레퍼런스 변수 xReference는 모두 같은 값이다. 1. 레퍼런스 전달 방식 함수에 전달한 변수는 값 전달 방식으로 처리한다. 함수의 매개변수에 정수를 전달하면 함수 안에는 그 정수의 복제본이 전달된다. 그래서 함수 안에서 원본 변수의 값을 변경할 수 없다. C에서는 스택 변수에 대한 포인터를 자주 사용했는데, 이런 방식을 사용하면 다른 스택 프레임에 있는 원본 변수를 수정할 수 있다. 이러한 포인터를..
[C++ 1.2.3] Const의 다양한 용도
1. const 상수 const는 상수와 관련 있다. C 언어에서는 흔히 버전 번호처럼 프로그램을 실행하는 동안 변경하면 안 되는 값에 이름을 붙일 때 전처리 구문인 #define을 사용 했다. C++ 에서는 상수를 #define 대신 const로 정의한다. const로 상수를 정의하는 방법은 변수를 정의할 때와 거의 같고, 값이 변경되지 않도록 보장하는 작업은 컴파일러가 처리한다. const int versionNumberMajor = 2; const int versionNumberMinor = 1; const std::string productName = "Super Hyper Net Modulator"; 2. const 매개변수 C++에서는 non-const(const가 아닌) 변수를 const 변..
![[C++ 1.2.2] 스택과 힙, 포인터와 동적 메모리, 역참조, 배열 포인터, 널 포인터 상수(NULL), 스마트 포인터(unique_ptr, shared_ptr)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGXaWi%2FbtrJREE4tlc%2FXLpT7e2REjwvUWbbGP5rVk%2Fimg.png)
[C++ 1.2.2] 스택과 힙, 포인터와 동적 메모리, 역참조, 배열 포인터, 널 포인터 상수(NULL), 스마트 포인터(unique_ptr, shared_ptr)
1. 스택과 힙 C++ 애플리케이션에서 사용하는 메모리는 스택과 힙으로 나뉜다. 스택 스택은 제일 위에 놓인 프로그램의 현재 스코프를 표현하며, 주로 현재 실행 중인 함수를 가리킨다. 현재 실행 중인 함수에 선언된 변수는 모두 최상단 스택 프레임의 메모리 공간에 담겨있다. 현재 foo()라는 함수가 실행된 상태에서 bar()라는 다른 함수를 호출하면 최상단에 bar()라는 함수가 올라온다. 이를 스택 프레임이 올라온다고 한다. foo()에서 bar()로 전달되는 매개변수는 모두 foo()의 스택 프레임에서 bar()의 스택 프레임으로 복제된다. 다음은 두 개의 정숫값이 선언된 foo() 함수가 실행되는 동안의 스택 프레임 상태를 보여준다. 스택 프레임은 각각의 함수마다 독립적인 메모리 공간을 제공한다. ..
[C++ 1.2.1] C++의 스트링
C++의 스트링 C++에서 텍스트 스트링을 다루는 방법은 세 가지가 있다. 1. C처럼 스트링을 문자 배열로 표현하는 방법. 2. 스트링 타입으로 감싸서 표현하는 방법 3. 비표준 제네릭 크래스를 사용하는 방법 C++의 string 타입은 헤더 파일에 정의돼 있고, 기본 타입처럼 사용할 수 있다. string 타입은 I/O 스트림과 마찬가지로 std 네임스페이스에 속한다. 다음은 string을 문자 배열처럼 다루는 방법이다. string myString = "Hello, World!"; cout
[C++ 1.1.14] 반복문(while 문, do/while, for, 범위 기반 for 문)
1. while 문 while 문은 주어진 표현식이 true가 될 때까지 일정한 코드 블록을 계속해서 반복한다. int i = 0; while (i < 5) { std::cout
[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; 구조적 바인딩에서는 왼쪽에 나온 선언할 변수 개수와 오른쪽에 나온 표현식 값 개수..