본문 바로가기

C++0x

[C++11] Storage class specifiers에 thread_local 추가 Storage class specifiers는 기존에 register, static, extern, auto가 존재했습니다.auto는 의미가 없기 때문에 C++11에서는 다른 용도로 사용됩니다.2014/12/10 - [Programming/C++11&14] - [C++11] auto 키워드C++11에는 thread를 지원하기 위해서 thread_local이 추가되었습니다.TLS(Thread Local Storage)를 지원하기 위해서 사용됩니다.하나의 변수를 선언하면 각각의 thread에 별도로 적용됩니다.thread_local은 Visual Studio 2013은 지원하지 않고 Visual Studio 2015부터 지원합니다.thread_local은 다음과 같이 사용하면 됩니다. #include #in.. 더보기
[C++11] std::mutex를 통한 thread 동기화 2015/06/28 - [Programming/C++11&14] - [C++11] thread 지원 - future를 통한 return값 획득 (2)이미 대부분의 OS는 동기화를 위한 다양한 장치가 마련되어 있습니다.thread가 C++11에서 직접 지원하면서 동기화를 위한 std::mutex가 추가되었습니다.헤더는 이며 사용 방법은 다음과 같습니다. #include #include #include std::mutex mtx; void ThreadFunc(int nID, int& nVal) { for (int i = 0 ; i < 5 ; ++i) { mtx.lock(); std::cout 더보기
[C++11] 새로워진 random number 생성 난수(Random number) 생성은 일반적으로 확률 값이 필요한 경우에 사용이 됩니다.프로그래밍을 처음 배울 때, 로또 번호 생성기를 제작할 때 쓰이기도 합니다.그 외에 난수를 기반으로 하는 암호화에도 활용이 됩니다.기존의 난수 생성은 다음과 같습니다. #include #include #include int main() { srand((int)time(0)); int nRand1 = rand(); int nRand2 = rand() % 11; std::cout 더보기
[C++11] std::pair를 확장한 std::tuple Boost에 존재하던 tuple이 C++ 표준으로 채택되었습니다. C++ TR1부터 사용이 가능해졌지만 C++11에 분류한 것은 이전에 작성한 가변인자 템플릿때문입니다. tuple은 기존의 std::pair를 확장한 자료형입니다. std::pair가 2개의 값을 한 번에 저장할 수 있지만 tuple은 제한이 없습니다. 기존의 C++ TR1에서는 10개까지 저장이 되었습니다. tuple은 2개 이상의 값을 한 번에 반환하거나 전달할 때 사용하면 유용합니다. 물론 구조체를 통해서 가능한 방법이긴 하지만 구조체는 정의를 해서 사용해야 합니다. tuple을 이용하면 간단하게 다양한 값들을 한 번에 전달이 가능하게 됩니다. 예제 코드는 다음과 같습니다. #include #include #include int ma.. 더보기
[C++11] 가변인자 템플릿을 위한 sizeof... 연산자 가변인자 템플릿의 지원으로 템플릿을 작성하는 것이 더 편리하게 되었습니다.C++11의 가변인자 템플릿에 대한 설명은 아래 링크를 통해서 참조할 수 있습니다.2015/03/05 - [Programming/C++11&14] - [C++11] 가변인자 템플릿(Variadic Templates)가변인자 템플릿이 추가되면서 sizeof...연산자가 추가되었습니다.sizeof...은 기존의 sizeof와는 약간 다른 기능을 합니다.sizeof...은 파라미터 팩의 수를 가져오는 역할을 합니다.가변인자로 넘어온 파라미터를 파라미터 팩이라고 하는데 ...이 실제 몇 개의 인자인가 알 수 있습니다.이전 가변인자 템플릿의 예제를 가져와서 조금 수정해 보도록 하겠습니다. #include using namespace std;.. 더보기
[C++11] 가변인자 템플릿(Variadic Templates) C와 C++에는 가변인자 함수가 존재합니다....이라는 생략 부호를 사용하는 특이한 형태의 함수입니다.C/C++에는 대표적인 가변인자 함수인 printf가 존재합니다. 가변인자 함수에 대해서는 아래의 링크를 참조하시면 됩니다.2014/12/07 - [Programming/C&C++] - 가변 인자 함수의 사용법(vprintf, vsprintf)2014/12/07 - [Programming/C&C++] - 가변 인자(Variable Arguments) 내부 구조C++11에는 가변인자를 템플릿에도 적용이 가능하게 되었습니다.가변인자 템플릿은 다음과 같은 형식으로 되어 있습니다. template returntype functionname(Arguments... args); template class class.. 더보기
[C++11] static_assert를 통한 컴파일 타임 검증 static_assert는 컴파일 타임에 소프트웨어 assertion을 위해서 추가된 문법입니다. 만약 작성된 constant-expression이 false(거짓)일 경우에 컴파일러는 메시지를 출력하고 C2338 에러를 출력합니다. 만약 true라면 아무런 영향도 발생하지 않습니다. 이미 C++에는 #error 전처리기 지시자와 assert 매크로를 통해서 assertion 처리가 가능합니다. 다만 C++의 assert는 런타임에 비교를 수행하기 때문에 성능의 하락을 가져올 수 있는 단점이 있습니다. 컴파일 타임에 해당하는 문제를 더 빨리 찾아내는 것이 모든 면에서 더 낫다고 할 수 있습니다. #error의 경우는 컴파일 타임에 처리가 가능합니다. 다만 템플릿이 구체화되기 전에 수행되버리기 때문에 템플.. 더보기
[C++11] default와 delete 키워드 C++의 클래스는 기본적으로 다음의 특수한 멤버 함수를 생성합니다.기본 생성자 복사 생성자 복사 대입 연산자 소멸자클래스를 생성하고 아무것도 하지 않아도 위의 4개는 기본적으로 생성됩니다.이것으로 클래스는 기본적으로 아무것도 추가하지 않아도 생성, 복사, 소멸이 가능해집니다.C++11에서는 기본적으로 생성되는 특수 멤버 함수에 무브 생성자와 무브 대입 연산자가 추가되었습니다.이 특수한 멤버 함수들을 명시적으로 선언하면 다음과 같은 규칙이 발생합니다.1. 어떤 생성자(복사 생성자 포함)가 명시적으로 선언된 경우 기본 생성자는 자동적으로 생성되지 않는다.2. 가상 소멸자가 명시적으로 선언된 경우 기본 소멸자가 자동적으로 생성되지 않는다.3. 무브 생성자나 무브 대입 연산자가 명시적으로 선언된 경우 1) 복사.. 더보기