Ключевое слово Register в C++


в чем разница между

int x=7;

и

register int x=7;

?

Я использую C++.

7 68
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

register является устаревшим до C++17, он не используется и зарезервирован.

Источник:http://en.cppreference.com/w/cpp/keyword/register