변수 초기화 방법 int a; (선언만), int b = 5; (복사 초기화), int c(6); (직접 초기화), int d{7}; (중괄호 초기화), int e{}; (0으로 초기화) 권장사항: 중괄호 초기화({}) 사용 권장 - 안전성과 일관성 제공 std::
1. const 역할: 변수, 객체, 함수, 포인터 등에 붙여서 값이 변경되지 않음을 보장하는 키워드. 특징: 선언과 동시에 반드시 초기화해야 하며, 이후 값 변경 불가. 컴파일러가 "읽기 전용"으로 취급하여 실수로 값을 바꾸는 것을 막아줌. 멤버 변수
소스 코드가 컴파일러에 의해 기계어로 번역되어 실행파일로 만들어지는 과정코드의 문법(Syntax)과 타입(Type) 오류를 검사하여 컴파일 타임 오류 발생시킴최적화 작업도 이 단계에서 일부 수행전처리(Preprocessing)먼저 \` - 결과: 소스코드가 확장된
b의 경우 Alex에서 Lewis Hamilton으로 수정하여, 문자열의 길이가 더 길어졌으므로, 동적할당을 통해 알아서 더 긴 문자열을 저장해준다b.length()는 unsigned integer이므로 int형 변수로 받을 때는 casting을 해주어야 함string
John Doe를 입력 시, John까지만 추출하여 name에 저장스페이스(공백문자)를 받지 못 한다\- std::getline을 이용하면, 공백문자를 포함해 한 줄 전체를 읽어 name\`에 저장John Doe 엔터를 입력 시, John Doe까지 추출하여 name에
논리 NOT 연산자(!)를 써서 bool 값을 반전할 수 있다0 입력 -> b1에 false 저장1 입력 -> b1에 true 저장그 이외의 정수 입력 -> b1에 true 저장 후, std::cin은 실패 처리정수가 아닌 입력 -> b1에 false저장 후, std:
소수값을 정확히 저장하지 못해, 대소비교(=,>)에 한계가 있다따라서 두 소수의 차이가 Epsilon보다 작으면 같다고 판정그러나 1.0과 1.00001이 다르다는 것은 괜찮지만, 100000.0과 100000.00001도 다르다고 하기에는 문제가 있어보임그래서 rel

bool자료형의 경우 1byte의 크기를 가지지만, 사실 true, false 2개의 값만을 가지기에 1bit만이 필요함따라서 여러 bool변수를 한 번에 모아서 사용하도록 하기 위해 bitset 변수를 사용가장 오른쪽부터 0으로 읽고 왼쪽으로 순서를 읽는다0b0000
naming collision을 예방할 수 있다namespace::식별자로 namespace 것을 사용::식별자로 global namespace 것을 사용scope resolution 없이 식별자를 사용할 경우현재 속해있는 namespace에서의 식별자를 찾아 사용현재
C/C++에서 linkage란, 프로그램 내 여러 파일(translation unit)에 나타나는 동일한 식별자(변수, 함수 등)가 실제로 "같은 것"을 의미하는지, 혹은 각각 독립적인 존재인지를 결정하는 개념이다. 이 linkage는 크게 internal linkag
C++17에서 도입된 inline 전역 변수extern 방식과 다르게, 헤더 파일에서 직접 정의하여도 여러 개의 소스 파일에서 중복 정의(ODR 위반) 없이 단 하나의 실제 전역 변수로 인식됨선언과 정의를 분리하는 번거로움이 없고, 헤더 파일 하나만 수정하면 전체 프로
Unnamed namespaces inline namespaces Reference
0. 미리 알아두기 참조자로 선언된 변수를 새로운 변수로 보지 말고, 참조하는 그 대상 자체로 보는 것이 편하다. 참조자 자체는 별도의 자료형이 아니라, 특정 변수에 접근하는 또 다른 이름(별칭)일 뿐이다. 1. 참조자란? 변수의 별칭(alias)으로, 원본 변수와 동일한 메모리 주소를 공유한다. 선언과 동시에 반드시 초기화해야 하며, 다른 대상을 참조로...
1. 객체와 클래스의 개념 객체란? 변수(상태)와 함수(행동)를 묶은 소프트웨어 덩어리 예: 캐릭터는 체력, 레벨(변수) + 공격, 방어(함수)로 구성 절차지향 vs 객체지향 절차지향: 데이터를 함수에 계속 전달 객체지향: 데이터와 행동을 하나의 객체로
C++에서는 같은 이름의 함수를 여러 개 정의할 수 있다인자의 타입이나 개수에 따라 적합한 함수가 자동으로 선택됨오버로딩 규칙:정확히 일치하는 타입의 함수가 있으면 선택없으면 표준 타입 변환(char→int, float→double 등) 후 선택여전히 없으면 더 포괄적
클래스 동적 할당 new 연산자를 사용해 클래스 객체를 동적으로 생성함 인자 없는 생성자 사용 시 인자 있는 생성자 사용 시 동적으로 생성한 객체는 사용 후 반드시 delete로 해제함 동적 '배열' 할당 기본 생성자가 있을 때만 인자 있는 생성자를 배열 전
1. 소멸자 (Destructor) 객체 소멸 시 리소스(메모리) 정리 담당 함수가 종료되어 지역 변수인 객체가 정리되거나, 동적으로 할당한 객체 메모리를 다시 delete 해줄 때 등 객체가 사라지는 경우에 소멸자가 호출된다 객체 소멸시킬 때 원하는 동작을 구현해주면
1. 복사 생성자와 복사 대입 연산자 차이 복사 생성자: 새로운 객체를 기존 객체로 초기화할 때 호출됨 객체가 "처음 만들어질 때"만 사용됨 복사 대입 연산자: 이미 생성된 객체에 다른 객체를 대입할 때 호출됨 2. 복사 대입 연산자 2-1. 기본
1. 초기화 리스트 생성자에서 멤버 변수를 생성과 동시에 원하는 값으로 초기화하는 문법 (생성자 이름) : var1(arg1), var2(arg2) {} var는 멤버변수, arg는 인자 기존 생성자와의 차이점 생성자 본문 대입은 "멤버 변수 생성 → 값 대입

1. 메모리에서의 함수 구조 함수가 실행되면 메모리의 stack에 공간을 차지하며 실행 함수가 종료되면 생성되었던 스택이 해제됨 이때 리턴값이 함수를 호출한 쪽으로 전달됨 1-1. 리턴값이 값(value) 함수의 리턴값이 레지스터(EAX, RAX 등)에 저장 리턴