在C ++中注册关键字
有什么区别
int x=7;
和
register int x=7;
?
我正在使用C ++。
在C ++中,任何使用关键字“auto”或“register”的程序在语义上都与删除关键字的语义相同(除非它们出现在stringmacros或其他类似的上下文中)。 从这个意义上说,这些关键字对于正确编译程序是没有用的。 另一方面,这些关键字在某些macros的上下文中可能是有用的,以确保不恰当地使用macros将导致编译时错误,而不是产生伪造的代码。
register
是编译器的一个提示,build议它将该variables存储在处理器寄存器而不是内存中(例如,而不是堆栈)。
编译器可能会或可能不会遵循该提示。
根据“不是(或者,别名)的关键词”中的 Herb Sutter:
一个注册说明符具有与自动说明符相同的语义…
根据Herb Sutter的说法, register
“和空白一样有意义 ”,对C ++程序的语义没有任何影响。
用今天的编译器,可能什么也没有。 原本是一个提示将variables放在寄存器中以便更快地访问,但是今天大多数编译器都忽略了这个提示并自行决定。
几乎肯定没有。
register
是编译器的一个暗示,你计划使用x
很多,而且你认为它应该放在一个寄存器中。
然而,编译器现在更好地确定哪些值应该放在寄存器中,而不是平均(甚至是专家)程序员,所以编译器只是忽略关键字,并按照自己的意愿去做。
register
被弃用,直到C ++ 17,它是未使用和保留。
来源: http : //en.cppreference.com/w/cpp/keyword/register
register
关键字对于:
- 内联汇编。
- 专家C / C ++编程。
- cachingvariables声明。
一个生产系统的例子,其中需要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 ++ 17上被弃用了