Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
70 / 70 / 35
Регистрация: 06.07.2016
Сообщений: 415

Ключевое слово "register"

23.01.2017, 08:05. Показов 3219. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
По-тихоньку с чистого Си перехожу на плюсы и хотелось бы понять, теряю ли я что-то, объявляя переменную как register. То есть теперь у меня не мало локальных переменных, объявленных в разных частях программы и хочется быть увереннеым, что "больше" не оптимизируешь.
Просто в MSDN (Пишу в VS) нарвался на такое :
" Начиная с версии Visual C++ 2010, ключевое слово auto не является описателем класса хранения C++, а ключевое слово register считается устаревшим."
Но ведь стандарт не полагает, что теперь любой компилятор поймет, что моя переменная - счетчик цикла? И не делаю ли я хуже (медленее) , когда пишу с модификатором register ? И может ли получится, что делаю его чуть быстрее или нет?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.01.2017, 08:05
Ответы с готовыми решениями:

Ключевое слово register
локальная переменная которая задается : register int a; так же будет локальной и сохраняется в регистр если есть свободное место. но...

Определить, в введенном предложении слово, которое состоит из тех же букв, что и заданное ключевое слово.
Ввести предложения и ключевое слово. Определить, в введенном предложении слово, которое состоит из тех же букв, что и заданное ключевое...

Ключевое слово try
Вот вчера печатал программу и нечаяно поставил вместо слова tru слово try и оно выделелось жырным шрифтом.А в моем компиляторе все ключевые...

14
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
23.01.2017, 09:23
Современные компиляторы в состоянии сами разобраться, что класть на регистр, а что нет. Если хочешь ускорить программу, то надо её ускорять за счёт правильного проектирования. А локальные вещи типа "замена умножения на степень двойки на сдвиг" или "распределение переменных на регистр" компилятор почти всегда сделает лучше программиста
2
70 / 70 / 35
Регистрация: 06.07.2016
Сообщений: 415
23.01.2017, 15:21  [ТС]
Evg, то есть это абсолютно бесполезно? Мне просто не сложно писать register, хотя бы для самоуспокоения. Про то что компиляторы нынче умнее мне уже говорили, но все ли компиляторы сейчас такие разумные?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
23.01.2017, 15:44
Цитата Сообщение от Notoriously Посмотреть сообщение
теряю ли я что-то, объявляя переменную как register.
Начиная с С++17 это слово выкидывают, так что лучше даже не начинать привыкать.
2
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
23.01.2017, 15:44
Лучший ответ Сообщение было отмечено Убежденный как решение

Решение

Цитата Сообщение от Notoriously Посмотреть сообщение
то есть это абсолютно бесполезно?
Это еще и вредно, в долгосрочной перспективе.
Вот представь, учишься ты, привык писать register везде, где тебе кажется осмысленным. Потом устроился на работу, а там никто так не пишет. Потому что знают, что современные компиляторы это слово игнорируют, а, начиная с С++17 (да-да, стандарт говорит),
The keyword is unused and reserved.
И все - готов конфликт на пустом месте. Тебе будут рекомендовать не писать его, а ты будешь сопротивляться. Я думаю, никому не надо доказывать, как обычно сложно человеку изменить свои привычки.

Цитата Сообщение от Notoriously Посмотреть сообщение
для самоуспокоения
Беспокоить тебя должна оптимальность твоих алгоритмов. И еще больше должна беспокоить идея о зле преждевременной оптимизации.

PS. Даже если компилятор не игнорирует register, то это не значит, что он будет делать все так, как ты ожидаешь. register - всегда был лишь рекомендацией, а не строгим предписанием.
4
70 / 70 / 35
Регистрация: 06.07.2016
Сообщений: 415
23.01.2017, 15:48  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
Начиная с С++17 это слово выкидывают
Понял.
Цитата Сообщение от DrOffset Посмотреть сообщение
Это еще и вредно, в долгосрочной перспективе.
Да,тут даже void в скобках сложно опускать,о чем тут говорить.
Спасибо за ответы.
0
23.01.2017, 16:39

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
Потому что знают, что современные компиляторы это слово игнорируют
Хоть в одной компании(не недавно зародившейся, а хоть с какой-нибудь кодовой базой) следуют новым стандартам? Сомневаюсь, недавно меня мучали велосипедными thread'aми, потому что они, видите ли, писались и занимают место на жётском диске, так что пользуйся, а то про какой-то с++11 тут говорит. :D

0
23.01.2017, 16:57

Не по теме:

Цитата Сообщение от GbaLog- Посмотреть сообщение
Хоть в одной компании(не недавно зародившейся, а хоть с какой-нибудь кодовой базой) следуют новым стандартам?
Я не работал во всех компаниях на свете, чтобы отвечать на твой вопрос. Но могу сказать свое мнение: что если от кодовой базы зависят деньги, а в руководстве не сидят авантюристы, то переход этот будут откладывать, т.к. это риск с профитом, который трудно обосновать заказчику (в моем случае и вовсе невозможно).

Что касается register...
Некоторые тут древним называют все, что старше 8-15 лет.
Поэтому, что касается register, то он игнорируется уже очень давно, можно сказать, с древних времен :)

0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
23.01.2017, 17:04
Цитата Сообщение от Notoriously Посмотреть сообщение
Мне просто не сложно писать register, хотя бы для самоуспокоения
Для самоуспокоения нужно для начала научиться программировать правильно и проектировать правильно. Пока это не научишься, нет смысла что-то оптимизировать.

Вот возьмём, к примеру, сортировку массива. Если ты её напишешь любым квадратичным методом (например, методом пузырька), но сколько бы ты не писал register, inline, сдвиги вместо умножения и т.п., быстро у тебя это сортировка работать не будет никогда и никакие опции оптимизации тебя не спасут. Единственный способ ускорить сортировку - это переписать программу, заменив квадратичную сортировку, на логарифмическую (например, qsort). Программы нужно ускорять именно так. А если для успокоения будешь писать register, то это будет втирание очков самому себе и ничего более
1
23.01.2017, 17:07

Не по теме:

GbaLog-, Давай так, под современным я понимаю - 21 век, ну и самый конец 20-го. На случай если ты где-то еще увидишь от меня это слово.
ЗЫ. Как же с вами трудно со всеми... :facepalm:

0
Evg
23.01.2017, 17:09

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
Я не работал во всех компаниях на свете, чтобы отвечать на твой вопрос. Но могу сказать свое мнение: что если от кодовой базы зависят деньги, а в руководстве не сидят авантюристы, то переход этот будут откладывать, т.к. это риск с профитом, который трудно обосновать заказчику (в моем случае и вовсе невозможно).
+1

Oracle уже много лет сидит на intel'овском компиляторе очень дремучей версии. И intel занимается поддержкой этого древнего компилятора только ради того, чтобы Oracle с него не слез. Потому что если oracle'у вдруг придётся с этой версии компилятора уходить, то им проще будет уйти на другой компилятор, потому что нет принципиальной разницы между переходом на intel'овский компилятор современной версии или любой другой - при любом ракладе придётся кучу времени угробить на отладку. Сию вещь мне рассказывали года 3 назад, может ситуация и поменялась, но переходить с одного на другое только ради того, чтобы вместо "a" можно было написать "b", в коммерческих компаниях не станут

0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
23.01.2017, 17:33
Цитата Сообщение от GbaLog- Посмотреть сообщение
Хоть в одной компании(не недавно зародившейся, а хоть с какой-нибудь кодовой базой) следуют новым стандартам?
В компании, где я работаю, проект начинался на С ещё в далёкие 90-е.
Сейчас в нём используются все прелести С++11(14). Легаси есть, но его сравнительно мало. Периодически, код освежается. И не думайте, что кодовая база мала - порядка 2кк строк кода в основном решении. (Кто-то, возможно, скажет, что это немного, но думаю малым количеством это не назовёшь).

Добавлено через 3 минуты
Ну и, само собой, https://habrahabr.ru/company/p... og/319824/
2
70 / 70 / 35
Регистрация: 06.07.2016
Сообщений: 415
23.01.2017, 18:11  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Для самоуспокоения нужно для начала научиться программировать правильно и проектировать правильно
Да,я понимаю,просто хотелось параллельно учиться еще и какие-то фичи языка для ускорения программы использовать.
Просто даже в стандарте было написано,что register стоит использовать,если "Вы хотите,чтобы скорость работы вашей программы была максимальна".
Но и про то что это лишь "просьба" компилятору - я понимаю, читал много раз,что он имеет право игнорировать подобные "просьбы".
0
23.01.2017, 18:34

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
что если от кодовой базы зависят деньги, а в руководстве не сидят авантюристы, то переход этот будут откладывать
Понятно. :(
Цитата Сообщение от DrOffset Посмотреть сообщение
(в моем случае и вовсе невозможно)
Это плохо.
Цитата Сообщение от DrOffset Посмотреть сообщение
Некоторые тут древним называют все, что старше 8-15 лет.
Я же молодой, да и с++98 толком не знаю. Вернее, думаю, что знаю, но не смогу в точности сказать, можно ли то или иное использовать в с++98, поэтому немного недолюбливаю старый код. :D
Цитата Сообщение от DrOffset Посмотреть сообщение
ЗЫ. Как же с вами трудно со всеми...
Простите. :resent:
Цитата Сообщение от MrGluck Посмотреть сообщение
В компании, где я работаю, проект начинался на С ещё в далёкие 90-е.
Сейчас в нём используются все прелести С++11(14).
Повезло, у меня на проекте используется с++11, но меня заставили разбираться с их потоками, потому что мне придётся работать на других проектах, где с++11 нет.

0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
23.01.2017, 18:44
Цитата Сообщение от GbaLog- Посмотреть сообщение
Хоть в одной компании(не недавно зародившейся, а хоть с какой-нибудь кодовой базой) следуют новым стандартам?
В любой, где практикуется TDD и code review. В этом случае переход на новый стандарт займет вряд-ли больше пары дней.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.01.2017, 18:44
Помогаю со студенческими работами здесь

Ключевое слово this
Можно какой-нибудь простой пример, чтобы понять зачем это нужно?

Ключевое слово this
В данный момент читаю книгу по Java, но и по С++ это тоже встречалось, хотя описание было не сильно понятно. Вопрос следующий, что делает...

Ключевое слово static
Здорова господа!!! Есть две функции f1() и f2(). #include <iostream> using std::cout; using std::endl; int& f1() ...

Ключевое слово noexcept
Прочитал про noexcept и понял, что его нужно использовать для тех методов, которые не бросают исключение, что бы компилятор не генерировал...

Ключевое слово extern
Взято отсюда: Теперь вопрос: почему так делать нельзя? Я написал программу, она имеет вид: extern int x; int main() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru