Мне интересно узнать поведение спецификатора хранилища register
в C/C++
. Следующая программа действительна в C++
, но в случае C
недействительна.Зарегистрировать спецификатор хранилища в C++
int main()
{
register int i;
int* b = &i; // Valid in C++ but not in C
}
Итак, мой вопрос, который я, Почему C++ разрешено адрес оператора (&) к регистровой переменной?
P.S: Я знаю register Спецификация хранения устарела в современном компиляторе.
Это * предложение * компилятора разместить переменную в регистре, поскольку программист ожидает более быстрого доступа к этой переменной. Но это не * усиливает это. –
По какой причине вы добавили тег C для вопроса C++? Это разные языки! – Olaf
Это действительно скучный ответ, но «потому что стандарт C++ так говорит». В нем говорится, что ключевое слово «register» является «подсказкой к реализации, которую объявленная переменная будет сильно использоваться», а «в большинстве реализаций будет проигнорирована, если будет принят адрес переменной». –