C ++ 키워드는 맹점을 구문 분석

휘발성 : 여기에 변수가 컴파일러는 일반적으로 운영 체제, 하드웨어, 또는 다른 스레드에서의 변화를 알고하지 않는 것입니다, 휘발성 변수를 지적했다. 이 매개 변수는 할당 할 수 없습니다 컴파일러 수준에서 일정한 변수를 확인하기 위해 CONST, CONST과 충돌하고, 컴파일시의 보장하지 않습니다.

따라서, 휘발성 CONST 될 수있는 정수 (int) 휘발성, CO 변성 휘발성 포인터 변수 변경 될 수있다; INT의 B = A, C는 INT = A, B 및 C의 값이 다를 수있다. 사용 시나리오 : 현장 상태 레지스터에 병렬 액세스 할 수 있습니다.

 

가변 CONST는 비 정적 멤버 변수 수정 클래스 정적 기능의 종류에 대한 제한을 파괴하는데 사용되어, 이러한 과제를 수정할 수있는 가변 변수이다.

 

CONST 변수 통상 일정한 변형

const 멤버 변수의 일정한 변형

const 멤버 함수는이 포인터의 내용이 변경 될 수 없습니다 수정,하지만 당신은 탈출 할 변경할 수 있습니다

const를 수정 매개 변수는 일반적으로 전달 const가 아닌 변수 인수와 호환 될 수 있습니다

CONST 개질제 함수 반환 값, 통상 오버 연산자는 + B = C 또는 (a = b) = C 문장이 표시를 피한다.

 

alignas (x)의 문을 정렬, X는 2의 거듭 제곱이 될 수 있습니다.

  alignas 구조체 (2) {

    를 숯불;

    숯 B;

    INT의 C;

      숯 D;

  }

  적어도 4B 표시 INT (C)가 있기 때문에 크기의 정렬 이후는 sizeof (A) = 8, 4의 배수 인

Alignof (x) x의 정렬을 확인하는

인라인 어셈블리 문 ASM에 대한 

명시 적 차폐 암시 적 변환

템플릿의 정의 템플릿 인스턴스 생성 규칙 (구현 코드를 생성하는 규칙 기능) 때문에 수출 선언과 정의, 일반적으로 헤더 파일에서 템플릿 기능이다, (기능을 구현하는 코드)를 일반 함수 정의를 좋아하지 당신이 전화 또는 콘크리트를 표시 할 때 구현 코드 템플릿 기능을 생성합니다

아바타 : 규칙은 특정 형식에 대한 생산 템플릿 기능을 달성하기 위해 :

tameplate <> 공극 스왑 (잡 J1, J2 잡) {

  ...  

}

또는

tameplate <> 보이드 스왑 <작업> (잡 J1, J2 잡) {

  ...  

}

인스턴스화 : 함수 템플릿 인스턴스화의 실현을 기반으로 코드를

명시 적으로 :

스왑 <작업> (J1, J2);

또는

tameplate 공극 스왑 <작업> (잡, 잡);

암시 : 직접 통화 스왑 (), 두 개의 작업 및 매개 변수

constexpr 상수 식 수정 변수의 값을 직접 특정 상수 값 대신 컴파일 컴파일러가 큰 장치에 대해 최적화 될 수 있고, 강한 제약 비인의 변수를 발견 할 수 있도록 컴파일 시간에, 즉, 안전 매크로

constexpr 값 ENUM, 스위치 어레이의 길이를 따라서 사용될 수있다. 배열 변수를 선언 할 수없는 이유는 어레이의 크기가 컴파일러에 의해 결정된다.

수정 된 변수가 수정 값, 모든 매개 변수가 constexpr있는 수정 기능을 컴파일해야 constexpr, 그것은 constexpr를 반환합니다.

클래스 생성자의 매개 변수 전달이 constexpr 경우, 다음 회원 모두가 constexpr 클래스인지 확인하기 위해, 클래스 생성자를 수정 constexpr 수, 생성자 몸이 비어 있어야합니다, 모든 구성원이 초기화 목록에서 초기화.

decltype : 변수와 자동차의 다른 유형의 분석.

noexcept :이 키워드는 런타임에, 밖으로 noexecpt 경우 함수가 예외를 throw (내부 함수가 예외를 포착 경우, 더 많은 작업을 수행하는 프로그램을 최적화하기 위해 컴파일러를 용이하게 예외가 기능을 발생하지 않습니다 컴파일러를 알려줍니다 처리의 완료,이 경우, 프로그램은 표준 전화 직접 종료된다 : () 함수를 종료) 예외가 발생되어 있지 않으며, 내부 함수 () 프로그램을 종료 표준 : 중단 부를 것이다.

NULL 매크로 소개 :

C ,, NULL 무효에 대한 포인터 * 실제로, INT * 다음에 오른쪽 foo_t * 포인터, 대응 내재 형 공극 * 포인터 할당으로 변환 할 때. 는 C ++ 컴파일러를하고있는 것은 C ++가 강력하게 형식화되어 있기 때문에, 잘못 될 것입니다 컴파일 할 경우 일반적으로, 첫 번째 파일 컴파일러 제품 등이 정의되도록, 무효 *이 암시 적으로, 다른 포인터 타입으로 변환되지 않습니다 NULL :

#ifndef NULL
#ifdef와 __cplusplus
#DEFINE NULL 0
#else
#DEFINE NULL ((공극 *) 0)
#endif 다음
#endif 다음

즉, C ++에서의 NULL은 재미 (INT)과 재미 (INT의 *)는, 펀 (NULL)로 전화 또는 제 1 함수를 호출 할 때 함수 과부하 0이다.

nullptr 모호함의 매력을 해결

thread_local 변수는 새로 도입 된 C ++ (11)의 저장 형태이다. 이는 메모리 사이클 변수에 영향을 미친다 (보관 기간), C ++은 저장 기간 네 가지 종류가있다 :

  1. 자동 (스택)
  2. 정적 (전역 변수 영역)
  3. 동적 (더미)

키 변수는 스레드 (할당)의 시작시에 생성되는 스레드 사이클 (나사 길이)이 변수 (또는 물체)을 수정 만 thread_local, 이것은 스레드의 단부 (해제) 될 때 파괴된다. 그리고 각 스레드는 변수의 개별 인스턴스가 (각 스레드가 자신의 인스턴스를 갖는 객체). thread_local 수 static 와  extern링크 속성 변수에 영향을 미칠 것이다 조합에 사용되는 키워드 (결합을 조절합니다).

 

그럼, 변수는 thread_local로 선언 할 수있다? 다음 세 가지 범주 괜찮아

  1. 네임 스페이스에서 전역 변수
  2. 정적 클래스 멤버 변수
  3. 지역 변수

 유형 ID 키워드, C ++ 중 하나를 sizeof 연산자의 종류 동등하다 . 결과 유형 ID 연산자가있는 type_info의 대상이라는 라이브러리 유형에 대한 참조를 반환합니다.

추천

출처www.cnblogs.com/GreenScarf/p/10966296.html