전통문화대전망 - 전통 미덕 - 고급 C++ 구문

고급 C++ 구문

C 기본 구문 (a)

0. c 프로그램을 컴파일할 때 컴파일러는 사전처리 이름 __cplusplus 를 자동으로 정의하고 표준 c 를 컴파일할 때 이름 __STDC__ 를 자동으로 정의합니다. 기타 유용한 사전 정의된 이름은 __LINE__ (파일의 현재 컴파일 행 수), __FILE__ (현재 컴파일 파일의 이름), __DATE__ (컴파일 날짜) 및 _ _ 입니다

1 에 대한 헤더 파일의 c 이름입니다. C 라이브러리는 항상 문자 c 로 시작하고 그 뒤에 접미사가 있는 c 이름이 옵니다. H, C 라이브러리와 마찬가지로 이름은 입니다. 두 가지 사용 방법:

# 포함 또는 포함

# 포함

네임스페이스 STD 사용

2. 정적 및 동적 메모리 할당의 두 가지 주요 차이점: (1) 정적 객체는 직접 조작할 수 있는 이름이 있는 변수이고 동적 객체는 이름이 없는 변수이며 포인터를 통해 간접적으로 조작할 수 있습니다. (2) 정적 객체의 할당 및 해제는 컴파일러에 의해 자동으로 처리되며 동적 객체는 프로그래머에 의해 명시적으로 관리되어야 하며 new 와 delete 표현식에 의해 수행됩니다.

클래스의 기본 생성자는 사용자가 매개 변수를 제공 할 필요가 없습니다.

4.STL 의 표준 배열 벡터 (파일) 에는 두 가지 순회 방법이 있습니다. (1) 아래 첨자 연산자를 사용합니다. (2) vector 와 같은 반복자 사용

문자 상수는 주소 지정할 수 없습니다.

6. 몇 가지 일반적인 이스케이프 시퀀스:

새 줄 (newline) \n \ 14

가로 탭 \t

세로 탭 \v

백스페이스 (백스페이스) \b

캐리지 리턴 \r

Form feed (피드 키) \f

경보 (벨소리) \a \7

7. 변수와 문자 상수에는 모두 저장소가 있습니다. 단, 변수는 주소 지정 가능하며 각 변수에 대해 두 개의 값이 연관되어 있습니다. 데이터 값, 객체의 오른쪽 값, 읽기 값, 문자 상수 및 변수는 오른쪽 값으로 사용할 수 있습니다. 변수의 왼쪽 값이라고 하는 주소 값은 위치 값이며 문자 변수는 왼쪽 값으로 사용할 필요가 없습니다.

8. 각 포인터에는 연관된 유형이 있습니다. 데이터 유형에 따라 포인터가 가리키는 객체 유형이 다릅니다. 주소 값만 저장해야 하는 경우 C 는 함수 포인터를 제외한 모든 데이터 포인터 유형의 주소 값에 의해 값을 지정할 수 있는 특수 포인터 유형인 null * 포인터를 제공합니다. 빈 포인터가 가리키는 개체를 조작할 수 없습니다. 주소 값만 전달하거나 다른 주소 값과 비교할 수 있습니다.

9.c 스타일 알고리즘주기:

While(*p ){…} {...}

10. 다음과 같이 참조를 올바르게 정의합니다.

Constintival =1024;

Const int * & amppi_ref = & ampival// error, pi _ ref 는 const 로 정의된 int 객체에 대한 포인터에 대한 참조입니다. 참조는 상수를 가리키는 것이 아니라 비상수 포인터를 가리킵니다.

상수 int * 상수 & amppi _ ref = & ampival// ok

1 1. 포인터와 참조에는 두 가지 주요 차이점이 있습니다. 참조는 항상 변수를 가리켜야 합니다. 한 참조가 다른 참조에 값을 지정하면 참조 자체가 아닌 참조된 객체가 변경됩니다.

12. Boolean 유형의 객체도 integer 유형의 객체로 간주되지만 signed, unsigned, short 또는 long 으로 선언할 수 없습니다.

13. 한 배열을 초기화하거나 다른 배열에 지정할 수 없으며 c 는 참조 배열을 선언할 수 없습니다.

14. 배열 식별자는 배열의 첫 번째 요소 주소를 나타냅니다. 그 유형은 배열 요소 유형에 대한 포인터입니다.

Intia [10];

첫 번째 요소의 주소: ia 또는&; Ia[0]

두 번째 요소의 주소: ia 1 또는&; Ia[ 1]

15.STL 에서 vector 를 사용하는 방법에는 두 가지가 있습니다. 배열 습관, 즉 아래 첨자 연산자를 사용하여 기존 멤버만 조작하도록 주의하십시오. STL 은 반복자를 사용하여 작업하는 데 익숙합니다. 참조를 해제하여 실제 객체에 액세스하거나 더하기 및 빼기를 통해 위치를 이동할 수 있습니다. 유사성과 5.

Typedef 는 기본 제공 또는 사용자 정의 데이터 유형에 대한 니모닉을 도입하는 데 사용됩니다.

Typedef char * cstring

외부 상수 cstring CSTR

Cstr 유형은 char * const CSTR 입니다

17. 컴파일러의 제어 또는 모니터링 외부에서 객체 값이 변경될 수 있는 경우 변수를 volatile 로 선언해야 하며 컴파일러에서 수행하는 일부 루틴 최적화는 이미 volatile 로 지정된 객체에 적용할 수 없습니다.

18.pair 클래스는 단일 객체 내에서 같은 유형이나 다른 유형의 두 값을 연결할 수 있습니다. 멤버 액세스 기호를 사용하여 쌍의 개별 요소에 액세스할 수 있습니다. 그들의 이름은 첫 번째와 두 번째입니다.

19. 클래스 외부에 정의된 인라인 멤버 함수는 클래스 정의가 포함된 헤더 파일에 포함되어야 합니다.

20.setw () 는 미리 정의된 iostream 연산자로, 읽을 수 있는 최대 문자 수는 전달된 인수에서 1 을 뺀 수입니다. Setw( 1024) 의 경우 최대 문자 수는 1023 입니다.

2 1. 표준 c 헤더 파일은 내장 유형 표현에 대한 정보를 제공합니다. 또한 표준 c 헤더 파일과.

22. 이진 연산자의 경우 왼쪽 및 오른쪽 피연산자의 계산 순서는 표준 C 와 C 에 정의되지 않으므로 계산 프로세스는 순서와 무관해야 합니다. 예를 들어 ia[index] 는 정의되지 않았습니다.

23. 초기화 프로세스는 객체에 초기 값을 제공하고, 할당은 객체의 현재 값을 새 값으로 덮어쓰는 것입니다. 객체는 한 번만 초기화할 수 있습니다. 즉, 정의할 때 할당을 반복할 수 있습니다. 초기화 intival =1024; 할당 ival =1025; 대입 연산자의 왼쪽 피연산자는 왼쪽 값이어야 합니다.

24.sizeof 연산자의 역할은 객체 또는 유형 이름의 바이트 길이를 반환하는 것입니다. 반환 값 type 은 size_t 입니다. 시스템 관련 typedef 정의이며 파일에서 찾을 수 있습니다.

25. 비트 NOT 연산자 (~) 를 눌러 피연산자의 각 비트를 반전시킵니다. 시프트 연산자 (>) 는 왼쪽 피연산자의 비트를 왼쪽 또는 오른쪽으로 이동하고, 외부로 이동하는 비트는 폐기되며, 왼쪽 시프트 연산자는 오른쪽에서 0 으로 공간을 채웁니다. 오른쪽 시프트 연산자, 부호 없는 숫자인 경우 왼쪽에서 0 을 삽입합니다. 그렇지 않으면 기호 비트 사본을 삽입하거나 0 을 삽입합니다. 이는 특정 구현에 의해 정의됩니다. 비트 and (&; ) 및 두 피연산자의 각 비트 (두 사람이 모두 1 인 경우에만 값은 1) 입니다. 비트 XOR () 연산자는 두 피연산자의 각 비트에 대해 XOR 연산을 수행합니다 (두 개의 값이 1 인 피연산자만 1 입니다. 즉, 두 개의 다른 값은 1 입니다). 비트 OR (|) 연산자는 두 피연산자 각각에 대해 OR 연산을 수행합니다 (두 자리가 모두 0 인 경우에만). 정수 a 의 27 번째 비트가 1: A | = 1 으로 설정된 경우

26. 헤더 파일인 비트셋 클래스는 세 가지 구성 방법을 지원합니다. 첫 번째는 Bitset 과 같은 벡터 길이를 직접 지정하는 것입니다

27. 운영자 우선 순위 테이블

28. 암시적 변환은 다음과 같은 경우에 발생합니다. 1. 혼합 산술 표현식, 즉 산술 변환; 2. 한 유형의 표현식을 사용하여 다른 유형의 객체에 값을 지정합니다. 3. 유형 및 형식 인수 유형이 다른 함수 호출에 표현식을 전달합니다. 4. 함수에서 표현식을 반환합니다.

29. 산술 변환의 두 가지 원칙: 1. 필요한 경우 이 유형은 항상 더 넓은 유형으로 승격됩니다. 2. 정수 값이 정수 값보다 작은 모든 산술 표현식은 계산 전에 정수 값으로 변환됩니다.

30.const_cast 변환 표정의 상수성과 변변 대상의 변성성; 예를 들어 const _ cast

3 1.typename 은 표준 c 에 새로 도입된 키워드로 template 에서 사용됩니다.

32. 두 개의 주요 순서 컨테이너는 list 와 vector 이고 다른 순서 컨테이너는 deque; 입니다. 두 개의 주요 연관 컨테이너는 맵과 set 입니다.

33. 순서 컨테이너 유형 선택에 대한 몇 가지 지침: (1) 무작위 액세스, 벡터가 목록보다 훨씬 좋습니다. (2) 요소의 수가 알려진 경우 벡터는 목록보다 강하다. (3) 컨테이너의 양쪽 끝에만 요소를 삽입하고 삭제하는 것이 아니라면 list 는 vector 보다 훨씬 낫습니다. (4) 컨테이너 헤드에 요소를 삽입하고 삭제해야 하는 경우가 아니면 deque 보다 Vector 가 더 좋습니다. 작은 데이터 유형의 경우 vector 는 list 보다 많은 양의 데이터를 삽입하는 성능이 훨씬 우수하고 큰 데이터의 경우 성능이 훨씬 뛰어납니다. 해결책은 큰 데이터만 보존하는 포인터입니다. Reserve 함수를 사용하면 컨테이너의 용량을 명시적으로 지정된 값으로 설정할 수 있으며 resize 함수는 컨테이너의 길이를 재설정합니다. 각 컨테이너는 관계 연산자 세트를 지원합니다. 사용자 정의 클래스 유형은 같음 연산자, 보다 작음 연산자, 요소 유형은 기본값 (클래스 유형의 경우 기본 생성자) 을 지원해야 합니다.

34. 반복자 유형 외에도 각 컨테이너에는 const 컨테이너를 트래버스하는 데 필요한 const_iterator 유형이 정의되어 있습니다. Const_iterator 는 컨테이너의 기본 요소에 대한 읽기 전용 액세스를 허용합니다. 반복자 산술 연산 (덧셈 또는 뺄셈과 같은 산술 연산, 오버로드 연산자 아님) 은 vector 또는 deque 에만 적용되며 list 에는 적용되지 않습니다. list 는 메모리에 연속적으로 저장되지 않기 때문입니다.

35.string 클래스의 find 함수는 string::size_type 또는 string::npos 의 인덱스 유형을 반환합니다. 을 눌러 섹션을 인쇄할 수도 있습니다 Find_first_of 는 검색 문자열에 있는 모든 문자의 첫 번째 일치 항목을 제공하고 해당 인덱스 위치를 반환합니다. Substr 함수는 기존 string 객체의 하위 문자열 사본을 생성합니다. 첫 번째 인수는 시작 위치를 나타내고 두 번째 선택적 인수는 하위 문자열의 길이를 나타냅니다. Rfind, 지정된 마지막 하위 문자열의 일치 항목을 찾습니다. Find_first_not_of 검색할 문자열의 어떤 문자와도 일치하지 않는 첫 번째 문자를 찾습니다. Find_last_of 검색 문자열의 모든 요소와 일치하는 마지막 문자를 찾습니다. Find_last_not_of 검색 문자열의 어떤 문자와도 일치하지 않는 문자열의 마지막 문자를 찾습니다.

36.tolower 함수는 대문자를 허용하고 해당하는 소문자를 반환합니다. 여기에는 헤더 파일과 isalpha, isdigit, ispunct, isspace, toupper 등 파일의 기타 함수가 포함되어야 합니다.

37. 문자열에 값을 지정합니다. Append 는 = 연산자와 유사합니다. Swap 은 두 문자열의 값을 교환합니다. 범위를 벗어난 검사를 수행하는 at 는 [] 연산자와 유사합니다. Compare 함수는 두 문자열의 사전 순서 비교를 제공합니다. Replace 함수는 문자열에 있는 하나 이상의 기존 문자를 하나 이상의 문자로 바꾸는 10 가지 방법을 제공합니다.

38.map 은 insert 함수에 사용되는 관련 키 값 쌍을 나타내는 value_type 유형을 정의합니다.

39. 연결 컨테이너는 두 가지 함수를 지원합니다. find 는 지정된 키를 찾고, 없는 경우 end () 를 반환합니다. Count 는 지정된 키 값의 발생 횟수를 반환합니다.

40.set 는 두 반복자에서 뺀 결과 유형인 difference_type 유형을 정의합니다. Inserter 클래스는 삽입 작업을 수행하는 데 사용됩니다. 예: 복사 (in, EOS, inserter (set 1, set 1. Begin());); 복사는 할당 작업을 수행하므로 삽입을 사용하여 할당 작업 대신 삽입 작업을 사용합니다.

4 1 에 대한 특수 연산 equal_range. Multiset 및 multimap 은 pair pos pos = mp.equal _ range (tst) 와 같은 반복자 쌍 값을 반환합니다.

42. 스택 클래스, 헤더 파일, top 함수 및 pop 함수는 각각 스택 맨 위 요소에 액세스하고 스택 맨 위 요소를 삭제합니다. 스택 유형은 스택 추상화를 기본 컨테이너에 적용하므로 컨테이너 어댑터입니다. 기본적으로 스택은 deque 에 의해 구현되며 list 를 사용하여 stack: stack 을 구성하는 등 기본 기본 컨테이너를 사용자 정의할 수 있습니다

43. C 에서 배열은 값을 통해 전달되지 않으며 항상 첫 번째 요소의 포인터 (정확하게 0) 를 전달합니다. 다차원 배열은 0 번째 요소에 대한 포인터로 전달됩니다. 예를 들어 matrix[][ 10] 는 int (*matrix)[ 10] 과 동등하며, 이는 matrix 가 각 줄에/kloc/가 있는 2 차원 배열임을 의미합니다 반면 int *matrix[ 10] 는 10 개의 int 에 대한 포인터가 포함된 배열을 나타냅니다.

44.UNIX 시스템 함수 chmod 는 파일의 보호 수준을 변경합니다. 해당 함수는 시스템 헤더 파일에 선언되어 있습니다.

45. 첫 번째 형태의 링크 표시기는 키워드 extern 다음에 문자열 상수와 extern "c" voidexit (); 두 번째 형식은 중괄호가 있는 relink 지시자가 있는 복합 문에 여러 함수 선언을 포함하는 것입니다. 링크 표시기는 함수에 나타날 수 없으며 헤더 파일에 더 적합합니다.

46. 명령줄 형식을 지원하는 주 함수: int main(int argc, char * argv []);

47. int (* pfunc) (int, int) 와 같은 함수에 대한 포인터; 이 유형에 대한 포인터는 주소 판독기를 함수 이름에 적용하여 생성할 수도 있습니다. 함수 정의 int f 1(int) 가 이미 존재하는 경우 Int (* pf1) (int) = f1; Int (* pf2) (int) = & F1; 함수 호출은 pf 1( 1) 또는 (*pf 1)( 1) 형식을 사용할 수 있습니다. 함수 이름이 호출 연산자에 의해 수정되지 않은 경우 함수 정의 intf (int) 와 같은 함수에 대한 포인터로 해석됩니다. 표현식 f 는 int (*)(int) 로 해석됩니다.

48. 함수 포인터 배열 정의: int (* testcases [10]) (); Typedef 를 사용하면 선언을 더 읽기 쉽게 만들 수 있습니다. Typedef int(* PFV)(); (); PFV 테스트 케이스 [10]; Pfv (* parlay) [10]; 함수 호출 (* parlay)[2](); [2] ();

49. 함수 매개 변수의 유형은 함수 유형이 될 수 없으며 함수 유형의 형식 매개 변수는 해당 함수 유형의 포인터로 자동 변환됩니다. 함수 유형 typedef int funtype (int) 이 있는 경우 : Void sort(int, funtype); 및 함수 정의 sort(int, int (*) (int)); 동등한 함수 포인터는 int (*ff(int))(int *, int); 이 선언은 ff 를 int 매개 변수가 있는 함수로 선언합니다. 반환 값은 int (*) (int *, int) 유형의 함수에 대한 포인터입니다.

50. c 함수에 대한 포인터는 c 에 대한 함수 포인터와는 다릅니다. 즉 int (*fcpp)(int) 와 extern "c" int (* FPC) (int) 의 유형이 다릅니다. 또한 링크 표시기가 선언에 적용되면 extern "c" void f1(void (* pf parm) (int)) 와 같이 선언된 모든 함수가 영향을 받습니다. 여기서 pfParm 도 c 함수 포인터입니다. 따라서 c 함수 포인터를 매개 변수로 사용하는 c 함수를 구현하려면 extern "c" typedef void fc (int) 와 같은 typedef 를 사용할 수 있습니다. C 함수 void F2 (fc * pf param);

5 1. 키워드 extern 은 정의 대신 선언 방법을 제공합니다. Extern 선언으로 메모리 할당이 발생하지 않습니다.

52. 헤더 파일에는 인라인 함수 및 객체 정의가 포함되지 않아야 합니다. 기호 상수 및 인라인 함수의 정의는 여러 번 반복할 수 있습니다. 컴파일 시 심볼 상수 값이 가능한 경우 이름 모양을 바꿉니다. 이 프로세스는 상수 축소입니다. 기호 상수는 const 유형의 모든 객체입니다. 그러나 다음 정의는 char * constbuf = newchar [10]; 그 값은 컴파일 시 결정될 수 없고 헤더 파일에서도 정의될 수 없기 때문입니다. Const char * msg = "Error msg 는 상수가 아니므로 상수가 아닌 포인터로 상수 값을 가리키므로 const char * const msg = 로 수정해야 합니다

53. 자동 객체, 등록 객체 및 로컬 정적 객체의 세 가지 로컬 객체가 있습니다. 함수에 자주 사용되는 변수는 키워드 register 를 사용하여 레지스터 객체로 선언할 수 있습니다.

54. 삭제 표현식은 new 표현식이 사용 가능한 저장소에서 할당한 포인터에만 적용됩니다. 다른 메모리 포인터에 작동하면 문제가 발생할 수 있지만 값이 0 인 포인터에 작동하면 delete 가 아무 작업도 가리키지 않습니다.

55.auto_ptr 은 프로그래머가 새 표현식으로 동적으로 할당된 개별 객체를 자동으로 관리할 수 있도록 하는 STL 에서 제공하는 클래스 템플릿입니다. 헤더 파일은 기본 객체 소유권을 가진 객체만 메모리를 해제할 책임이 있지만 복사 생성자와 할당을 사용하면 왼쪽 객체가 소유권을 얻고 오른쪽 객체는 취소된다는 것입니다. Get 을 사용하여 기본 객체를 가리키는지 여부를 테스트하고, reset 을 사용하여 기본 객체를 재설정하며, 할당 연산자는 메모리 포인터를 지원하지 않습니다.

56. consint * PCI = newconsint (1024) 와 같은 동적 const 개체를 만들 수 있습니다. 상수 객체 배열을 만들 수 없습니다. 생성된 상수 객체를 초기화해야 합니다.

57. 새 표현식을 찾아 프로그래머가 할당된 메모리에 객체 생성을 요청할 수 있도록 합니다. 예: char * buf = newchar [1024]; Foo * Pb = new (buf) foo;

58. 이름 없는 네임스페이스를 사용하여 파일의 로컬 엔티티를 선언할 수 있습니다. 즉, 이 함수는 현재 파일에만 표시됩니다. 일반적으로 구현 파일에서 사용되며 c 언어에서 정적 함수 선언을 대체하는 데 사용됩니다.

59. 함수를 다시 로드합니다. 두 함수의 함수 이름은 같지만 함수 매개변수 테이블은 달라야 합니다. 매개변수 수 또는 유형이 다릅니다. 함수 선언은 전달 매개 변수의 유형이 const 인지 volatile 인지 여부에 관계없이 void f(int) 와 함수 void f(const int) 가 동일한 함수인지 여부를 식별합니다. 그러나 주소나 참조를 전달할 때는 두 표현식을 모두 고려해야 합니다. Void f(int *) 와 함수 void f(const int *) 는 서로 다른 함수입니다.

60. 오버로드 함수 세트의 모든 함수는 동일한 도메인에서 선언해야 합니다. 선언과 표시기를 사용하면 한 네임스페이스의 멤버를 다른 네임스페이스에 표시할 수 있으므로 오버로드된 함수 세트에 영향을 줍니다. Using 선언은 항상 오버로드된 함수의 모든 함수에 대한 별칭을 선언합니다. 가져온 함수가 이미 도메인에 있고 매개변수 테이블이 같으면 오류가 발생합니다. 외부 "C" 링크 표시기는 오버로드된 함수 세트 중 하나의 함수만 지정할 수 있습니다.

6 1. 함수 오버로드 분석의 세 단계 (1) 는 함수 호출에서 고려되는 오버로드 함수의 집합을 결정하고 함수 호출에서 인수 테이블의 속성을 결정합니다. (2) 오버로드된 함수 세트에서 함수를 선택합니다. 주어진 조건에서 인수를 사용하여 호출할 수 있습니다. (3) 통화에 가장 적합한 기능을 선택하십시오. 두 번째 단계에서는 컴파일러에서 수행해야 하는 매개변수 변환 및 등급을 결정하고 일반적으로 정확한 일치로 나눕니다. 일치 유형 변환 일치하지 않습니다. 이 중 유형 변환은 일반적으로 승격, 표준 변환 및 사용자 변환의 세 그룹으로 나뉩니다.

62. 정확한 일치 세부 정보: 실제 매개 변수라도 가장 작은 유형 변환을 적용하여 해당 함수 형식 매개 변수의 유형으로 변환해야 합니다. 이러한 최소 유형 변환에는 왼쪽 값에서 오른쪽 값으로의 변환이 포함됩니다. 배열에서 포인터까지 함수에서 포인터로의 변환 및 제한된 유형 변환 (일반적으로 const 및 volatile 유형 변환) 정확한 일치는 명시적 강제 변환을 통해 수행할 수 있습니다. 이 경우 매개변수 유형은 변환된 유형입니다.

기본 구문 (2 부)

0. 유형 변환의 힌트는 실제로 char 에서 int 로, bool 에서 int 로, float 에서 double 로 내장 데이터 유형의 향상입니다.

1. 유형 변환의 표준 변환에는 (1) 정수 값 유형 변환 (승격 없음) 의 다섯 가지 유형이 있습니다. (2) 부동 소수점 변환; (3) 부동 소수점 대 정수 변환; (4) 포인터 변환 및 (5) 부울 변환. 처음 세 가지 전환은 잠재적으로 위험합니다. 모든 표준 변환은 동일합니다. 몇 가지 고려 사항: 0 은 모든 포인터 유형으로 변환할 수 있으므로 만든 포인터를 빈 포인터 값이라고 하며 0 은 임의의 정수 상수 표현식일 수도 있습니다. 상수 표현식 0L 과 0x00 은 정수 값 유형이므로 int * 의 null 포인터 값으로 변환할 수 있습니다. 포인터 변환을 통해 모든 포인터 유형의 매개변수를 void * 로 변환할 수 있지만 함수 포인터는 표준에 따라 void * 로 변환할 수 없습니다.

2. 참조 매개 변수의 경우 실제 매개 변수가 참조에 유효한 초기 값이면 정확히 일치하고, 그렇지 않으면 일치하지 않습니다.

3. 템플리트 비유형 매개변수는 매개변수 이름이 템플리트 정의 카테고리의 상수를 나타낸다는 공통 매개변수 선언으로 구성된 상수 표현식을 나타냅니다. 인스턴스화할 때 상수는 컴파일 시 알려진 상수 값으로 대체됩니다.

4. 템플릿에서 유형 표현식을 지원하려면 typename 을 사용해야 합니다. Typename Param::name * p;; 포인터 p 를 정의합니다. Typename 을 사용하지 않으면 표현식은 곱셈입니다. 또한 템플릿 함수를 inline 또는 extern 으로 선언할 수 있습니다. 이 경우 표시기가 매개 변수 템플릿 뒤에 있어야 합니다. 틀

5. 함수 매개변수 유도에서 세 가지 유형의 변환 허용: (1) 왼쪽 값 변환; (2) 자격 전환 (상수 및 가변성 지표); (3) 기본 클래스로 변환: 실제 인수가 클래스인 경우 함수 매개 변수로 지정된 클래스 템플릿에서 인스턴스화되는 기본 클래스가 있습니다. 다음과 같은 코드: 템플릿

6. 템플리트 매개변수를 명시적으로 지정할 수 있습니다. 이러한 매개변수는 쉼표로 구분된 목록에 명시적으로 지정되고 그 뒤에 함수 템플리트 인스턴스의 이름이 옵니다. 예를 들어, min 은

7.c 는 포함 모드와 분리 모드의 두 가지 템플릿 컴파일 모드를 지원합니다. 포함 모드에서 함수 템플릿의 정의는 각 템플릿이 인스턴스화되는 파일에 포함되며 정의는 종종 헤더 파일에 배치됩니다. 분리 모드에서는 함수 템플릿의 선언이 헤더 파일에 배치되고 해당 정의가 다른 구현 파일에 배치됩니다. 구현 파일의 함수 템플릿 정의는 키워드 export 를 사용해야 합니다.

8.c 는 명시적 템플릿 인스턴스화를 지원하며 함수 템플릿 정의는 명시적 인스턴스화 선언과 동일한 파일에 제공되어야 합니다. 틀

9.c 는 템플릿의 명시적 및 전용 정의 (예: 템플릿) 를 지원합니다

10. 표현식을 던져서 예외를 발생시킬 수 있습니다. PopOnEmpty (클래스 객체) 예외가 발생하면 표현식은 throwpoponempty () 입니다. 또한 catch 절에서 큰 클래스 객체의 복제를 방지하기 위해 catch 절의 예외 선언을 참조로 변경할 수 있습니다.

1 1. catch 절을 찾아 발생한 예외를 처리하면 복합 문과 함수 정의가 예외로 종료됩니다. 이 프로세스를 스택 확장이라고 합니다. C 는 스택이 발전함에 따라 모든 구문 분석 함수가 호출되도록 합니다. 비록 로컬 클래스 객체의 수명 주기는 예외가 발생하여 끝납니다. 승인된 예외를 재발생하려면 throw 문을 사용합니다. 재발생하는 동안 수신된 예외 객체를 수정하려면 catch 절의 예외 선언을 참조로 변경해야 합니다.

12. throw 로 지정된 예외 준수 함수 매개변수 테이블, 그 뒤에 예외 유형 테이블이 옵니다. Void pop(int & amp;; Value) throw (Popo nempty); 예외 사양은 예외 유형 테이블에 나타나지 않는 예외가 발생하지 않도록 보장합니다. 런타임 시 예외 유형 테이블에 나타나지 않은 예외가 발생하면 c 표준 라이브러리에서 예기치 않게 정의된 함수가 호출되고 terminate 함수 종료 프로그램이 직접 호출됩니다. Null 예외 사양은 예외를 발생시키지 않습니다.

13. 함수 선언에 예외 설명을 표시할 수 있습니다. 예외 사양이 있는 포인터를 초기화할 때 오른쪽 값으로 사용되는 포인터의 예외 사양은 왼쪽 값으로 사용되는 포인터의 예외 사양과 같거나 더 엄격해야 합니다. 물론 매개변수 유형 테이블은 동일해야 합니다.

14. 함수 포인터를 사용하여 템플릿을 더 많은 상황에 맞춥니다. 내장 함수 포인터 선언의 템플릿은 다음과 같이 정의됩니다. 템플릿