클래스에서 파생 클래스가 부모 클래스의 함수를 재정의 하여 사용 하는 것

프로세스는 운영체제에서 실행되는 프로그램의 최소단위프로세스는 cpu의 코에에서 실행이 된다.CPU 코어에서 돌아가는 프로그램 단위이다.CPU 한개의 코어에서 한 번에 한 개의 쓰레드의 명령을 실행시킨다.한개의 프로세스는 최소 한 개의 쓰레드로 이루어짐두 개 이상의 쓰레

CPU에서는 연산을 처리할 때 register에 데이터를 기록한 다음에 연산을 수행한다.레지스터의 크기는 8바이트로 작고 수도 많지 않다.그렇기에 데이터를 메모리에 저장을 하고 메모리에서 레지스터로 값을 가져와 사용하고 다시 가져다 놓는 식으로 작동한다.. (컴퓨터 구
일반 생성자와 소멸자처럼 복사 생성자라는 것이 존재한다.말 그대로 객체를 생성할 때 다른 객체를 복사하여 생성한다고 이해하면 된다. 위의 코드를 보게 되면 클래스 A에 대한 객체 A1을 A2에 복사하여 생성하고 A3에 A2를 복사하여 생성되는 것을 알 수 있다. 말
만약 이런 코드가 있을 때Implicit함수는 인자로 class인 A를 받아야하는데 밑에 코드에는 5를 넣었을 때도 정상적으로 작동하는 것을 알 수가 있다. 기본적으로 5가 암시적 변환(Implicit Conversion)을 하기 때문에 5에 해당하는 생성자를 찾아 변
사용자가 원하는 타입을 넣어주면 그에 맞게 짜여지는 틀과 같은 역할을 한다.위 코드처럼 들어가는 변수의 타입에 맞게 코드가 실행된다.위 경우들 처럼 클래스 템플릿에 인자를 전달해서 실제 코드를 생성하는 것을 클래스 템플릿 인스턴스화 (class template inst
개발자가 함수 반환값을 반드시 사용해야 하는 상황에서 실수를 방지하도록 돕는 도구이다.이런 경우일 때 사용되고 추가로 \`\`\`\[nodiscard("사용자에 대한 ID를 사용하지 않고 있습니다!")] int GetID(const std::wstring& userN
람다 함수는 익명 함수(anonymous function)로, 간결하게 정의하여 코드의 가독성을 높이고, 함수 객체(functor) 없이도 간편하게 사용할 수 있다.✅ 람다 함수 기본 문법✅ 예제\[] : 캡처 리스트 (외부 변수를 사용할 수 있게 함)\-> 클래스처럼
C++에서 예외(Exception)는 프로그램 실행 중 오류 또는 비정상적인 상황이 발생했을 때 이를 감지하고 적절히 처리하는 메커니즘이다.예외 처리를 사용하면 프로그램이 비정상적으로 종료되는 것을 방지하고, 오류를 보다 체계적으로 관리할 수 있다.C++ 예외 처리는
예외처리 과정에서 delete 해야 했던 것을 못하고 넘어가게 되는 경우가 발생→ 메모리 누수(memory leak)하지만 C++에서는,예외가 발생해 함수에서 빠져나가더라도,그 함수의 스택에 정의된 모든 객체는 자동으로 소멸자 호출됨→ 이 과정을 stack unwind
std::function은 단순 함수뿐만 아니라 operator(), 람다, 멤버 함수, std::bind 등을 포함한 모든 callable 객체를 저장하고 호출할 수 있는 다형적인 함수 래퍼 클래스입니다.템플릿 인자로 함수의 타입(반환, 인자)를 받아 함수 객체를 보
copy elision은 말 그대로 “복사(또는 이동)를 생략하는 최적화이다.copy constructor 또는 move constructor가 호출되어야 하는 지점에서컴파일러가 임시 객체를 만들지 않고, 최종 목적지에 바로 객체를 생성해서복사/이동 생성자 호출 자체를
“이름이 있고, 주소를 잡을 수 있고, 계속 존재하는 객체”를 나타내는 표현식&expr 해서 주소를 얻을 수 있는 애들이 대부분 lvaluex, s, s.a 전부 “실제 메모리 어딘가에 있는 객체”나중에 다시 읽고/쓰고 싶을 때 재사용 가능한 애들 → lvalue“계산
std::move는 단지 x를 T&&로 static_cast 해주는 함수→ “이 값은 이제 rvalue(xvalue)처럼 취급해도 좋다”는 의사를 알리는 역할메모리 복사 X자원 이동 X내부 상태 변경 X→ 진짜 “move” 작업은 move constructor / mo
현대 C++의 동기화 도구들은 "안전성, 성능, 추상화"라는 세 가지 축을 중심으로 발전해 왔습니다.일반적인 mutex는 운영체제의 커널 리소스를 사용하므로 매우 무겁습니다. 스레드가 잠들고 깨어날 때 발생하는 Context Switch 비용을 줄이고, CPU 하드웨

std::thread는 하위 레벨의 운영체제 스레드를 직접 다루는 객체입니다. 스레드가 생성되어 함수를 실행하고 나면, 그 결과값을 어디에 저장해야 할지 std::thread 자체는 알 방법이 없습니다.비동기성: 스레드는 자기가 할 일을 다 하고 언제 끝날지 모릅니다.
C++11 이전에는 객체를 초기화하는 방법이 너무 파편화되어 있었습니다.어떤 건 ()를 쓰고, 어떤 건 {}를 쓰고, 어떤 건 =를 썼죠.특히 "가장 성가신 구문 분석(Most Vexing Parse)"이라는 치명적인 문법적 모호함이 있었습니다.모든 데이터 타입을 중괄

이 키워드가 붙은 객체나 함수의 리턴 값을 컴파일 타임에 알 수 있다는 의미를 가짐 어떠한 식이 상수식이라고 명시해주는 키워드const로 정의된 상수들은 굳이 컴파일 타임에 그 값을 알 필요가 없음.goto 문 사용예외 처리(trya문 C++ 20 부터 가능)리터럴 타

타입을 알고자 하는 식의 타입으로 치환되게 됨괄호로 둘러쌓이지 않은 식별자 표현식(id-expression)일 경우 해당식의 타입을 얻을 수 있다.개별 엔티티(변수, 함수, 네임스페이스 등)를 식별하기 위해 사용하는 모든 명칭이 식별자 표현식에 해당한다. 범위 결정
이 데이터에 이름이 있고 주소를 취할 수 있는가(정체성) / 이동시킬 수 있는가(이동 생성자, 이동 대입 연산자등 사용여부)에 대한 분류이다.위의 세 가지를 묶어서 부르는 '그룹명', 컴파일러가 규칙을 적용할 때 주로 사용 정체성(Identity)을 가진 모든 것
타입들에 대해 여러가지 연산을 수행할 수 있는 메타 함수들을 제공하고 있다.static_assert(bool 타입의 constexpr) 전달된 식이 참이라면 컴파일러에 의해 해당 식은 무시되고 거짓이라면 해당 문장에서 컴파일 오류 발생시킴v를 static 인자로 가지는