8월, 2022의 게시물 표시
{{ label!='' ? 'Label : ' : (q!='' ? '검색 : ' : '전체 게시글') }} {{ label }} {{ q }} {{ ('('+(pubs|date:'yyyy-MM')+')') }}

[C++] The C++ Programming Language: 6. Types and Declarations (2) - Character Types

이미지
 6.2.3 Character Types   세상에는 다양한 문자들과, 다양한 인코딩 방식이 있습니다. C++는 이를 위해 다양한 문자 자료형을 지원하죠: char: 프로그램 텍스트를 위한 기본 문자 자료형입니다. A char is used for the implementation's character set. 보통 8비트입니다. signed char: char와 비슷하지만 부호를 붙일 수 있습니다. 양수와 음수 값을 가질 수 있습니다. unsigned char: char와 비슷하지만 양수임이 보증됩니다. wchar_t: 유니코드와 같이 큰 문자 집합을 표현할 수 있습니다. wchar_t의 크기는 implementation-defined이며, 아무리 큰 문자 집합이여도 충분할 정도로 큰 크기를 지니고 있습니다. char16_t: UTF-16과 같은 16-비트 문자 집합을 표현합니다. char32_t: UTF-32와 같은 32-비트 문자 집합을 표현합니다.   이러한 6개의 자료형이 존재합니다. 구현상 char형은 signed char, unsigned char와 동일하지만 여전히 그들은 분리된 자료형임에 유의하세요. (생략)   십진수와 26개의 알파벳 문자, 몇몇 구두점 문자들을 포함한 문자 집합을 구현한다는 것은 확실합니다. 하지만 다음을 보장한다고 생각하지는 마세요: 8-비트 문자 집합에는 127개 이하의 문자만 있습니다. (어떤 집합은 때로 255개의 문자를 지원하기도 합니다) 영어에서 쓰이는 알파벳 문자 말고는 존재하지 않습니다. (대부분의 유럽 언어에서는 다른 문자들도 지원하는 경우가 있습니다) 알파벳 문자들의 값은 연속으로 26개에 대응합니다. (EBCDIC는 i와 j 사이에 값의 간격이 있습니다) C++에서 쓰이는 문자는 전부 사용 가능합니다. (어떤 국제 문자 집합에서는 {, }, [, ], |, \를 지원하지 않습니다) char는 1 byte입니다. (char를 4 byte로 처리하는 프로세서들도 존재합니다. 이 경우 16-비트 유니코

[C++] The C++ Programming Language: 6. Types and Declarations (1) - Booleans

6. Types and Declarations 6.1 The ISO C++ Standard (생략) 6.2 Types   다음을 고려해봅시다: 1 x  =  y + f( 2 ) ; cs   C++ 프로그램에서 이것이 유효하려면, 이름 x, y, f는 사전에 선언되어 있어야 합니다. 곧, 프로그래머는 x, y, f의 자료형을 명세해야 하죠.   모든 이름(식별자)은 자료형이 연결되어 있습니다. 해당 이름에 대해 어떠한 연산들을 적용할 수 있는지, 어떠한 연산들로 번역되는지 정의되어 있는 것이죠. (생략) 6.2.1 Fundamental Types   C++은 다음과 같은 기본 자료형이 존재합니다: 불리언 자료형 (bool) 문자 자료형 (char, wchar_t 등) 정수 자료형 (int, long long 등) 부동소수점 자료형 (double, long double 등) void   이러한 자료형으로부터, declarator operator를 이용해 생성할 수 있는 자료형이 있습니다: 포인터 자료형 (int* 등) 배열 자료형 (char[] 등) 참조형 (double&, vecotr<int>&& 등)   추가적으로, 사용자는 새롭게 자료형을 정의할 수 있습니다. 자료구조와 클래스 열거형 (enum, enum class)   불리언, 문자, 정수 자료형을 integral type이라고 말합니다. integral과 부동소수점 자료형을 arithmetic type이라고 말합니다. 열거형과 클래스를 user-defined type이라고 말합니다. 기본 자료형, 포인터, 참조형을 합쳐 built-in type이라고 말합니다. (생략) 6.2.2 Booleans   불리언은 참 혹은 거짓의 값을 갖는 자료형입니다. 논리적인 값을 표현하는데 사용됩니다: 1 2 3 4 5 void  f( int  a,   int  b) {      bool  b1  {a = = b} ;      // ... } cs   만약 a와 b가 같은 값을 가졌다면,

[C++] The C++ Programming Language: 5. A Tour of C++: Small Utility Components

 5.4 Small Utility Components     모든 표준 라이브러리 컴포넌트들들이 명백한 이름의 기능, 예를 들어 containers, I/O와 같은 부분만 제공하는 것은 아닙니다. 이번 절에서는 작지만 널리 사용되는 컴포넌트들에 대해서 알아볼 것입니다: 시간을 측정하기 위한 clock과 duration iterator_traits와 is_arithmetic과 같이 자료형에 대한 정보를 주는 자료형 함수들 다차원적 값의 집합을 간단히 표현하기 위한 pair와 tuple   이 절의 요점은, 이 함수 혹은 자료형들은 복잡하지도 않고, 다른 함수 혹은 자료형과 강력하게 결합되어 사용되어야 하는 것도 아니라는 점입니다. 그럼에도 유용하죠. 이러한 라이브러리 컴포넌트는 좀 더 강력한 라이브러리 기능을 제공하기 위해 사용되는 빌딩 블록들이 됩니다. 5.4.1 Time   시간을 다루는 기능을 제공하는 표준 라이브러리입니다. 다음은 시간을 다루는 간단한 예제입니다: 1 2 3 4 5 6 using   namespace   std : :chrono;   // see §35.2 auto t0  =  high_resolution_clock: :now( ) ; do_work( ) ; auto t1  =  high_resolution_clock: :now( ) ; cout   < <  duration_cast < milliseconds > (t1−t0) .count( )   < <   "msec\n" ;   clock은 time_point(시간의 한 점)을 반환합니다. 두 time_point를 빼는 것은 duration(시간의 한 구간)을 반환하죠. 다양한 clock은 그들의 다양한 시간 단위로 결과를 반환합니다. 이 예제의 경우 nanoseconds입니다. duration을 익숙한 다누이로 변환하는 것은 좋은 생각입니다. duration_cast가 하는 일이죠.   시간을 다루는 표준 라이브러리는 <chron

[C++] The C++ Programming Language: 5. A Tour of C++: Concurrency and Utilities (2)

이미지
 5.3 Concurrency   동시성이란 몇몇 작업들을 동시에 실행하는 것입니다. 이는 단일 계산을 위한 여러 프로세서들을 사용함으로써 처리량을 늘리거나, 다른 프로그램이 응답을 기다릴 때 다른 부분을 처리할 수 있도록 허용함으로써 반응성을 증대시키기 위해 널리 사용됩니다. 모든 현대 프로그래밍 언어는 이를 지원합니다. 이 C++ 표준 라이브러리는 간편하며 20년 이상 사용되온 type-safe 변형이며 대부분의 최신 하드웨어가 보편적으로 지원하는 것입니다. 이 표준 라이브러리 지원은 세련된 하이 레벨 동시성 모델을 직접적으로 제공하는 것보다는 시스템 레벨의 동시성을 지원하는 것에 초점이 맞춰져 있습니다. 이들은 표준 라이브러리 기능을 사용해 빌드된 라이브러리로 제공될 수 있습니다.   표준 라이브러리는 단일 주소 공간에서 많은 스레드들의 동시 실행을 직접적으로 지원합니다. 이를 가능하게 하기 위해, C++은 적합한 메모리 모델과 원자적인 연산 집합을 제공합니다. 그러나 대부분의 사용자들은 표준 라이브러리와 그 최상위에서 구현된 라이브러리들로만 동시성을 볼 수 있을 것입니다. 이 섹션은 주요한 표준 라이브러리 동시성 지원 기능의 예제들을 살펴볼 것입니다: thread, mutex, lock() 연산, packaged_task, future. 이 기능들은 운영 체제가 제공하는 것에 따라 직접적으로 구축되어 있고, 이들 간의 성능 차이는 없습니다. 5.3.1 Tasks and threads   우리는 잠재적으로 다른 계산 작업들과 동시에 실행될 계산들을 태스크라고 합니다. 스레드는 프로그램 안의 태스크를 시스템 레벨에서 표현한 것입니다. 다른 태스크와 동시에 실행될 수 있는 태스크는 std::thread(<thread>에 있습니다)를 생성함으로써 시작할 수 있습니다. 태스크는 생성자의 인자가 됩니다. 태스크는 함수 혹은 함수 객체입니다: 1 2 3 4 5 6 7 8 9 10 11 void  f( ) ;   // function struct  F  {