C ++에서 키워드 등록 register int x=7; ? C ++를 사용하고 있습니다.

차이점은 무엇입니까

int x=7;

register int x=7;

?

C ++를 사용하고 있습니다.



답변

2010 년에 존재했던 C ++에서 “auto”또는 “register”키워드를 사용하는 유효한 프로그램은 해당 키워드가 제거 된 프로그램과 의미 상 동일합니다 (문자열 매크로 또는 기타 유사한 컨텍스트에 나타나지 않는 한). 그런 의미에서 키워드는 프로그램을 적절하게 컴파일하는 데 쓸모가 없습니다. 반면에 키워드는 특정 매크로 컨텍스트에서 매크로를 잘못 사용하면 가짜 코드를 생성하는 대신 컴파일 타임 오류가 발생하도록하는 데 유용 할 수 있습니다.

C ++ 11 및 이후 버전의 언어에서 auto키워드는 초기화 된 객체에 대한 의사 유형으로 작동하도록 용도가 변경되었으며 컴파일러는이를 초기화 표현식의 유형으로 자동으로 대체합니다. 따라서 C ++ 03에서 선언 : auto int i=(unsigned char)5;int i=5;블록 컨텍스트 내에서 사용될 때 와 동일 auto i=(unsigned char)5;하며 제약 조건 위반이었습니다. C ++ 11에서는 auto int i=(unsigned char)5;제약 조건 위반 auto i=(unsigned char)5;이되었고 auto unsigned char i=5;.


답변

register 메모리 대신 프로세서 레지스터에 해당 변수를 저장하도록 권고하는 컴파일러에 대한 힌트입니다 (예 : 스택 대신).

컴파일러는 그 힌트를 따를 수도 있고 따르지 않을 수도 있습니다.

Herb Sutter에 따르면 “아닌 키워드 (또는 다른 이름의 주석)” :

레지스터 지정자는 자동 지정자와 동일한 의미를 갖습니다.


답변

에 따르면 허브 셔터 , register“입니다 공백과 정확히 같은 의미 “와 C ++ 프로그램의 의미에 영향을주지 않습니다.


답변

오늘날의 컴파일러에서는 아마 아무것도 없을 것입니다. Is는 원래 더 빠른 액세스를 위해 레지스터에 변수를 배치하는 힌트 였지만 오늘날 대부분의 컴파일러는 그 힌트를 무시하고 스스로 결정합니다.


답변

거의 확실하지 않습니다.

registerx많이 사용할 계획 이며 레지스터에 배치해야한다고 생각 하는 컴파일러에 대한 힌트 입니다.

그러나 이제 컴파일러는 평균 (또는 전문가) 프로그래머보다 레지스터에 어떤 값을 배치해야하는지 결정하는 데 훨씬 더 뛰어나므로 컴파일러는 키워드를 무시하고 원하는대로 수행합니다.


답변

registerC ++ 11에서는 더 이상 사용되지 않습니다. C ++ 17에서는 사용되지 않고 예약되어 있습니다.

출처 : http://en.cppreference.com/w/cpp/keyword/register


답변

register키워드는 유용했다 :

  • 인라인 어셈블리.
  • 전문가 C / C ++ 프로그래밍.
  • 캐시 가능한 변수 선언.

register키워드가 필요한 생산 시스템의 예 :

typedef unsigned long long Out;
volatile Out out,tmp;
Out register rax asm("rax");
asm volatile("rdtsc":"=A"(rax));
out=out*tmp+rax;

C ++ 11 이후로 더 이상 사용되지 않으며 사용되지 않으며 C ++ 17 에서 예약되어 있습니다.