목록게임프로그래밍/C++ (19)
bdfgdfg
먼저 이것을 설명하기 전에 lvalue와 rvalue의 개념이 잡혀있어야 한다. C++에서의 모든 표현식은 lvalue 또는 rvalue이다. lvalue는 단일 식(해당 코드 라인)을 넘어 없어지지 않고 지속되는 객체. -> 주소가 존재하는 이름 있는 변수 (const타입 포함). -> 문자열 리터럴 상수의 경우에는 lvalue이다. 반면 rvalue의 경우에는 단일 식을 넘어 지속되지 않는 임시적인 객체. -> 임시 객체란 런타임에 잠깐 사용되는 객체로 -> 상수 또는 임시 객체는 rvalue라고 할 수 있다. -> 주소가 없는 객체,리터럴 상수, i++, i--등등 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 int main() { int x = 100; /..
람다(lambda) 식 간단하게 말하면 이름없는 함수를 의미한다. 함수를 호출하는 방법은 C++에서는 다양한 방법이 존재한다. 1. 일반 전역 함수, 멤버 함수등 2. 함수 객체 ( 클래스 () 연산자 오버로딩 ) 3. 함수 포인터사용 여기서 벡터 컨테이너의 요소를 정렬하는 코드를 보면. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 bool Compare(std::pair lhs, std::pair rhs) { return lhs.first.GetValue() > rhs.first.GetValue(); // 내림차순 정렬 } int main() { srand(time(nullptr)); std::vector vc; vc.reserve(100); for ..
using c++11에서 추가된 typedef대신 사용할 수 있는 키워드 typedef을 사용하면 사용자가 여러 타입의 별칭을 생성하고, 사용할 때에는 해당 별칭을 통해 사용할 수 있다. -> 참조 키워드에서 해당 메모리에 다른 별칭을 붙이는 것과 비슷한 개념. -> C/C++에서 이미 정의된 자료형이나 사용자 정의 자료형을 사용자가 원하는 별칭을 붙여 사용 가능하다. typedef이 사용될 수 있는 간단한 예제를 보면 1 2 3 4 5 6 7 8 9 10 11 typedef std::list::iterator ListPos; int main() { std::list list; list.push_back(100); ListPos iter = list.begin(); std::cout
default,delete C++11에서부터 default키워드를 이용하여 명시적으로 default한 생성자를 선언할 수 있다. 1 2 3 4 5 6 7 class Test { // 컴파일러가 기본적으로 기본생성자,소멸자,복사생성자등을 만든다. private: int m_test; }; Colored by Color Scripter cs C++11이전부터 클래스 내부의 생성자를 만들지 않더라도 기본적으로 기본생성자,복사생성자,대입복사연산자,소멸자 등을 만들어 줬다. (+ C++11이후에는 기본 생성 함수에 move 생성자와 대입연산자도 추가되었음) 기본 함수를 정의하면 컴파일러는 해당 기본 생성자를 만들어 주지 않는다. default키워드는 그것을 명시적으로 만든다. 그렇기에 비어 있는 생성자나 소멸자를..