Ответ 1
Мы можем найти обоснование для устаревания регистра в отчет о дефекте 809: Отмена ключевого слова в регистре, в котором говорится (внимание мое):
Ключевое слово register выполняет очень мало функций, не предлагает больше чем подсказка, которую отмечает примечание, обычно игнорируется. Должен быть устарел в этой версии стандарта, освободив зарезервированное имя для использования в будущем стандарте, так же как и авто, было повторно использовано это время для того, чтобы быть таким же бесполезным.
удаление регистра для С++ 17 было одобрено в Lenexa, но он по-прежнему зарезервирован для будущего использования.
Ключевое слово register устарело в стандарте С++ 2011 года, как его эффект уже был неявным на языке. Он остается зарезервированным для будущее использование по стандарту, и пришло время удалить его рудиментарный спецификация.
Из-за правила as-if компилятор должен только эмулировать наблюдаемое поведение программы, и, следовательно, оптимизатор может через as- если правило решит сохранить переменную в регистре, если она не будет влиять на наблюдаемое поведение и, по-видимому, в большинстве случаев будет лучше выбирать, поскольку обычно она имеет больше информации.
Для справки также см. роль "зарегистрировать" ключевое слово C? в списке рассылки gcc
, один из ответы в потоке говорит:
Я не думаю, что ключевое слово "register" когда-либо затрагивало распределение регистров в gcc. Для этого вам нужно вернуться к компиляторам 1970-х годов.
Ключевое слово register все еще используется, однако, в gcc extension: gcc использует его в сочетании с asm для реализации регистра переменные.