Modern C++(ISO 11이후)

킴스코딩클럽·2022년 12월 22일
1

CS기초 시리즈

목록 보기
65/71

2011년 이후의 c++(ISO C++11이후 버전)

C++11

  1. nullptr : 문법으로 제공되는 키워드 (null과 0)
  2. auto : 타입 추측(ai는 아님)
int f()
{
return 2;
}
int main()
{
	auto fptr =f;
    std::cout<<
    f()
    <<std::endl;
}
  1. uniform initalization { }

  2. initalizer list : 초기화식

void function(std::initializer_list<int> args)
{
//초기화리스트 기능생기면서 이런 기능도 생김
//이 기능이 생기면서 유니폼 초기화식도 생성되게됨
}
int main()
{
	function({1,2});
}
  1. range based for
  2. lambda expression(익명함수,이름이 없는 함수)
[캡처절](매개변수)->반환타입
{	
	//함수 본체 정의
}    
int f()
{
	return 2;
}
//위와 같은 기능을 하는 람다식
int main()
{
	//auto fptr =f;
    auto fptr = []()->int{return 2;};
    //->int 생략가능(추론가능하기때문)
    std::cout<<
    f()
    <<std::endl;
}
//캡처절 : 현재 블록에 존재하는 변수들을 람다 함수가 캡처해가는 것 
[ ]	: 캡처없음(외부변수 사용 불가능)
[&] : reference(참조로가져옴 : 참조로 가져옴)
[=] : value(값을가져옴 : 값으로 가져옴)
  1. enum class
enum TrafficLight
{
	RED,
    YELLOW,
    GREEN,
};
enum PixelColor
{
	RED,		//안됨
    GREEN,		//식별자가 전역이라서 불가능함
    BLUE,
};
enum classPixelColor
//클래스면 가능함
{
	RED,		
    GREEN,		
    BLUE,
};
int main()
{ 
	TrafficLight color;
    color = RED;
    color = TrafficLight::RED;
    Pixel p1;
    p1=Pixel::Red;
 }
  1. 스마트포인터
  • 사용법
std::unique_ptr<int> p {std::make_unique<int>()};

get() : a pointer to the managed object (시스템에 의해 관리되는 메모리에 포인터를 돌려줌)

//get() : 옛날 방식의 포인터와 호환
int *ptr = p.get();
release()
reset()
  • 용도
std::unique_ptr<> : 고유한1:1(포인터와 리소스와의 관계가 11) -> 나를 참조하는 포인터가 사라지면 리소스가 없어짐
std::shared_ptr<> : 공유한1:n(여러 포인터가 하나의 리소스를 공유) -> 나를 참조하는 포인터가 하나도 없을 때 지워짐(인스턴스가 여러개-같은몬스터 여러개)
std::weak_ptr<>   : 약한(소유권이 없음 , 참조 카운트에 영향을 주지 않는 공유 포인터-파티원) -> 대부분 일반 포인터로 대체함
  1. 튜플
auto s2 = std::make_tuple(1, 2.0f, "abc", true);
auto p3 = std::make_pair(1, "hello");
  1. 정규 표현식(regular expression)
std::regex 
1.문자열 검색과 관련된 기능
2.반복 노가다 대신해드리는 사무업무 부담을 줄여줌
3.문자열 치환
abcd@gmail.com
abcdef.co.kr
helloworld@abc
abc.co.kr@gmail.com
abcd@gmail.com
abcdef.co.kr
helloworld@abc
abc.co.kr@gmail.com
맞는 이메일 검사하기
[^@\t\r\n]+@[^@\t\r\n]
  1. 쓰레드(std::thread)

    1. 멀티쓰레드는 하나의 프로세스 안에서 동시에 여러 작업을 병렬 처리 =동시성 프로그래밍(concurrency programming) 프로세스의 메모리를 공유하고 프로세스가 관리함 deadlock-mutual exclusion이 발생함
    2. 프로세스는 보조기억장치에 저장된 앱이 메모리에 등록되어 운영체제가 관리하게되는 것 자신의 정보를 context에 저장하며 운영체제의 작업관리자가 관리함 메모리 부족 현상이 발생할 수 있음
    3. DEADLOCK : 하나의 자원에 몰려서 끝나기까지 기다리다무한 반복에 들어가게되는 것 -> 이런 상황이 벌어지지 않게 만드는 것이 필요 (해결책은 없음) : 상호배제규칙(Mutual Exclusion)
    4. 동시성 프로그래밍
      • 동기화 프로그래밍(sync) : 함수가 실행이 되면 함수 내용이 전부 실행되어 나옴 = 함수의 반환을 기다려야함 (일반적으로는 동기화 프로그래밍)
      • 비동기 프로그래밍(asynchronous) -> 게임 데이터를 다운받으면서 플레이어가 움직이는 두가지 작업을 가능(corountine)
profile
공부 기록용

0개의 댓글