Ключевое слово Register в C++
в чем разница между
int x=7;
и
register int x=7;
?
Я использую C++.
7 ответов:
в C++ любая допустимая программа, которая использует ключевые слова "auto" или "register", будет семантически идентична той, в которой эти ключевые слова удалены (если они не появляются в строковых макросах или других подобных контекстах). В этом смысле слова бесполезны для правильной компиляции программы. С другой стороны, ключевые слова могут быть полезны в определенных контекстах макросов, чтобы гарантировать, что неправильное использование макроса вызовет ошибку времени компиляции, а не создание фиктивного кода.
register- это подсказка компилятору, советующая ему хранить эту переменную в регистре процессора вместо памяти (например, вместо стека).компилятор может следовать или не следовать этой подсказке.
согласно Хербу Саттеру в " ключевые слова, которые не являются (или, комментарии под другим именем)":
описатель регистра имеет то же самое семантика как авто описатель...
по данным Херб Саттер,
registerЭто "точно так же значимо, как пробелы" и не влияет на семантику программы на языке C++.
с сегодняшними компиляторами, наверное, ничего. Изначально это был намек на то, чтобы поместить переменную в регистр для более быстрого доступа, но большинство компиляторов сегодня игнорируют этот намек и решают сами.
почти наверняка ничего.
registerэто подсказка компилятору, который вы планируете использоватьxмного, и что вы думаете, что он должен быть помещен в регистр.
The
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++17