본문 바로가기

c++9

(C++)참조자 const 참조자는 L-value와 R-value참조자가 있다. 초기값으로 각 value에 맞는 값을 넣어주면 되는데 const키워드가 붙은 참조자에 대해 알아보자. 1. const int& const int& a 나 int const& a나 같은 의미이다. 둘다 참조자 자체를 상수화시키는게 아니라 상수형 int를 참조하는 의미이다. const int를 참조하기 때문에 (초기화되는 변수가 꼭 const일필요는 없다.) 해당 변수의 별명격인 참조자의 값을 다른값으로 바꿀수 없다. 또한 초기값으로 항상 변수가 와야했던것과 달리 const이기에 상수로 초기화 해 줄 수 있다. 2. int& const 참조자 자체를 상수화 시킨다. 하지만 생각해보면 참조자 자체가 const와 동격이 된다. L-value참조자의 경우 처음.. 2020. 10. 6.
(C++)연관컨테이너(set, multiset, map, multimap) 연관 컨테이너와 시퀀스 컨테이너(vector, deque, list)의 차이 각 원소를 삽입할때 연관 컨테이너는 자동으로 함수객체(디펄트로 less객체)에 따라 정렬되며, 또한 시퀀스컨테이너는 배열, 리스트로 구현되는것과 다르게 내부 데이터가 Balaced Tree로 구현된다. push_back(), push_front(), front(), back()같은 함수가 존재하지 않는다. 그렇기에 접근에 유리한 vector와 deque / 삽입, 삭제에 유리한 List 에 비해 연관 컨테이너는 탐색에 Log 시간대를 가지며 유리하다. 또한 연관컨테이너는 4개 모두 같은 인터페이스를 가진다. multi? multi가 붙은 컨테이너는 키값의 중복을 허용한다. equalrange(), lower_bound(), up.. 2020. 9. 22.
(C++) 템플릿 템플릿은 함수나 클래스에서 실행 시 받는 타입별로 따로 구현해놓지 않아도 임의의 타입에 맞게 자동으로 구현되는 기능이다. 템플릿의 과정 컴파일이 시작되면 구체적 타입에 맞게 템플릿 인스턴스가 생성 된다. 이 과정은 단순 코드의 복사 붙여넣기와 동일하며 RunTime에 타입을 변화시켜주는 자바의 제네릭과는 확실히 다르다. virtual 같은 동적 바인딩과도 다른것이다. 특수화 템플릿 특수화 템플릿은 특정한 타입만의 예외를 제공해주는 템플릿이다. 특수화 시 지켜야 할점이 있는데 매개변수와 리턴값의 타입을 똑같이 맞춰줘야 한다. template void test(T data) { std::cout 2020. 9. 14.
(C++)함수 호출 규약 함수 호출 규약은 함수 호출 시 전달되는 인자의 순서나 함수가 종료될 때 함수의 스택을 정리하는 시점 등을 약속한 것이다. 대표적인 함수 호출 규약으로 stdcall, thiscall, fastcall 등이 있다. 기본 정적 함수 호출규약은 cdecl이고 멤버함수는 thiscall을 사용한다. cdecl, stdcall, fastcall 이 3가지 함수 호출 규약을 비교해 보도록 하겠다. cdecl stdcall fastcall 인수 호출 방향 오른쪽 -> 왼쪽 오른쪽 -> 왼쪽 오른쪽 -> 왼쪽 인수 전달 매체 스택 스택 레지스터와 스택 스택프레임 정리 주체 호출자 호출 받는쪽 호출받는쪽 cdecl의 경우 c와 c++의 표준 규약이고 printf와 같은 가변인자를 받기 위해 만들어졌다. 가변인자이기에 .. 2020. 7. 13.