기술나눔

C 11-Part 2의 새로운 기능 소개

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

11. 자동 유형 추론

(1) Auto형 자동 도출
auto는 변수의 유형을 자동으로 추론합니다.
auto는 실제 유형을 나타내지 않으며 단지 유형 선언을 위한 자리 표시자일 뿐입니다.
Auto는 전능하지 않으며 어떤 시나리오에서도 추론될 수 있습니다. auto를 사용하여 선언된 변수는 컴파일러가 실제 유형을 추론하고 컴파일 타임에 auto를 실제 유형으로 변환할 수 있도록 초기화되어야 합니다.
변수가 포인터 또는 참조가 아닌 경우 파생 결과는 const 및 휘발성 키워드를 유지하지 않습니다. 변수가 포인터 또는 참조인 경우 파생 결과는 const 및 휘발성 키워드를 유지합니다.
자동을 사용할 수 없는 시나리오:
1.auto를 함수 매개변수로 사용할 수 없습니다. 왜냐하면 auto를 형식 매개변수로 사용하는 것은 변수를 초기화하지 않는 것과 동일하고 auto를 내보낼 수 없기 때문입니다.
2. 비정적 멤버 변수는 객체에 속하고 객체의 유형은 생성될 때까지 알 수 없기 때문에 클래스의 비정적 멤버 변수를 초기화하는 데 사용할 수 없습니다.
3. auto 키워드를 사용하여 배열을 정의할 수 없습니다.
4. 자동은 템플릿 매개변수를 파생하는 데 사용할 수 없습니다.
자동차에 권장되는 사용 시나리오:
1. STL 컨테이너 탐색에 사용됩니다.
2. 일반 프로그래밍에 사용됩니다.
(2) decltype 유형 파생
때로는 변수가 필요하지 않거나 정의할 수 없지만 특정 유형을 얻으려는 경우 decltype을 사용하여 컴파일 중에 표현식 유형을 추론할 수 있습니다. 예: int x=18 a=x; ;즉, a부터 x까지의 유형을 추론합니다.
파생 규칙:
1. 표현식이 일반 변수, 일반 표현식 또는 시간 클래스 표현식이고 decltype을 사용하여 추론된 유형이 표현식의 유형과 일치합니다.
2. 표현식은 함수이고, decltype을 사용하여 추론된 유형은 함수의 반환 값과 일치합니다(반환 값이 const, 휘발성 한정자로 수정되면 한정자는 무시됩니다).
3. 표현식은 lvalue이거나 ()로 포장되어 있으며 decltype은 표현식 유형에 대한 참조를 추론하는 데 사용됩니다(반환 값이 const 또는 휘발성 한정자로 수정되면 한정자는 무시됩니다).
decltype의 적용 시나리오:
1. 일반 프로그래밍에는 불확실한 유형이 많기 때문에 주로 일반 프로그래밍에 사용됩니다.

12. 최종 사용

final은 특정 클래스가 상속되거나 특정 가상 함수가 재정의되는 것을 제한하는 데 사용됩니다.
final이 함수를 수정하는 경우에는 가상 함수만 수정할 수 있으며, final 키워드는 클래스나 함수 뒤에 와야 합니다. 가상 함수가 final로 수정되면 하위 클래스가 상위 클래스의 가상 함수를 재정의하는 것을 방지할 수 있습니다.
final이 클래스를 수정하는 경우 클래스 이름 뒤에 final을 작성하여 이 클래스가 더 이상 상속될 수 없음을 나타냅니다. 즉, 이 클래스에는 더 이상 파생 클래스가 없습니다.

13.사용

초기 역할: 네임스페이스를 선언하는 데 사용됩니다. 네임스페이스를 사용하면 사용자 하위 클래스가 숨겨진 상위 클래스와 동일한 이름을 갖는 메서드를 호출하는 것을 방지할 수 있습니다.
새 함수: 유형의 별칭을 정의합니다. 실제로는 새 유형을 정의하는 대신 원래 유형에 별칭만 제공합니다. 사용 방법: using new type = old type: using my_int = int;
함수 포인터를 정의하기 위해 typedef 대신 using을 사용하면 코드를 더 쉽게 읽을 수 있습니다. 초기에는 typedef int(func)(int, string); 대신 using 정의를 사용하세요: using func = int()(정수, 문자열);
을 사용하면 템플릿의 별칭을 지정할 수 있지만 typedef는 지정할 수 없습니다.

14.오른쪽 꺾쇠괄호

초기 C 컴파일러는 두 개의 직각 괄호를 오른쪽 시프트 연산자로 해석했습니다.
새로운 기능 중에서 여러 개의 직각 괄호를 템플릿 매개변수 종결자로 최대한 많이 구문 분석하도록 컴파일러의 구문 분석 규칙이 개선되었습니다.

15.오버라이드 사용

Override는 파생 클래스에서 재정의되는 함수가 기본 클래스의 해당 가상 함수와 동일한 시그니처를 갖는지 확인하고 기본 클래스의 함수가 재정의된다는 것을 명확하게 나타내는 데 사용됩니다.
재정의는 함수 뒤에 작성되어 함수가 재정의되었음을 명시적으로 나타내며 컴파일러는 함수 유형과 상위 클래스의 가상 함수를 확인합니다.

16. 반환값 유형 접미사

함수 선언 본문 뒤에 함수의 반환 값 유형을 씁니다. auto func(매개변수 1, 매개변수 2,...) -