차이점은 무엇입니까
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는 원래 더 빠른 액세스를 위해 레지스터에 변수를 배치하는 힌트 였지만 오늘날 대부분의 컴파일러는 그 힌트를 무시하고 스스로 결정합니다.
답변
거의 확실하지 않습니다.
register
x
많이 사용할 계획 이며 레지스터에 배치해야한다고 생각 하는 컴파일러에 대한 힌트 입니다.
그러나 이제 컴파일러는 평균 (또는 전문가) 프로그래머보다 레지스터에 어떤 값을 배치해야하는지 결정하는 데 훨씬 더 뛰어나므로 컴파일러는 키워드를 무시하고 원하는대로 수행합니다.
답변
register
C ++ 11에서는 더 이상 사용되지 않습니다. C ++ 17에서는 사용되지 않고 예약되어 있습니다.
답변
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 에서 예약되어 있습니다.