목록C++ (6)
momodudu.zip
Template Instantiation 템플릿은 실제로 컴파일 타임에 특정 타입의 템플릿이 하나의 타입으로 구체화된 클래스 정의를 생성한다. 이 과정을 instantiation(구체화)라고 한다. 1) implicit instantiation 구체적인 자료형을 명세하지 않고 컴파일러에서 타입을 추론해주는 경우. 이 객체가 실제로 사용되기 전까지는 만들지 않는다. 포인터의 경우에는 선언하고 객체를 생성할때 구체화되며 포인터가 아닌 경우에는 선언만으로도 instantiation이 이루어진다. // 함수 템플릿 template T sum(T a, T b) { return a+b; } int main() { sum(1, 2); // 컴파일할 때 int sum(int a, int b) 함수 생성 sum(1.0,..
c++11 부터 제공되는 상수 표현식 키워드. 상수 표현식은 변수나 함수, 생성자 등에 대해서도 컴파일 타임에 상수처럼 처리할 수 있게 해준다. 17부터는 람다도 상수 표현식 사용이 가능하다. constexpr이 붙은 변수, 또는 함수는 컴파일타임에 타입이 결정되는 Literal type에만 적용이 가능하다. 뭐가 리터럴 타입인지 헷갈린다면, 표준함수에서 제공하는 std::is_lateral_type을 사용하면 된다. constexpr int getNumber() { return 10; } void main() { int myArray[getNumber()]; } 위와 같은 형태로, constexpr 키워드가 붙은 함수/변수는 컴파일타임에 타입이 상수표현식으로 결정이 되므로, 런타임에는 동적이 아니면 결..
uniform discrete distribution, 아래와 같이 범위내 정수가 모두 같은 확률 P로 범위 내의 정수 a,b가 나타나는 난수 생성 함수 std::default_random_engine generator; std::uniform_int_distribution distribution(0,9); int p[10]={}; for (int i=0; i
c++을 제대로 안쓴지가 넘 오래돼서 개념이 오락가락하기 시작한다;;; lamda에서 변수 캡쳐 과정에 대해서 다시한번 짚어보자.. 이걸 짚어보기전에, 스위프트랑 달라서 헷갈렸던 호출 방식 부터 훑어보자. call by reference 와 call by value. call by reference는 어떤 변수의 값을 참조, address로 받으면서 기존 variable이 그대로 넘겨진다. 여기서 "그대로"는 카피 없이, 즉 기존의 오브젝트 혹은 변수가 그대로 전달이 된다. 그래서 전달된 함수 scope내에서 이 변수를 수정하면, 수정이 가능하고 함수 스코프 밖으로 빠져나와도 이 변경사항이 반영이 된다. 반면 call by value는 말그대로 "value"를 전달한다. 내가 어떤 객체를 선언해서, 어떤..