Как я понимаю, в центре внимания здесь типы результатов функций, поэтому смотрим только на них.
В функциях 2, 4 и 6 модификатор const не предотвращает ничего. И ничего не меняет, если конечно речь не идет о более сложных сценариях использования, где имеют значение сигнатуры самих функций.
Типы результатов других функций:
(1) Указатель на константные данные. const запрещает изменение данных, адресуемых указателем.
(3) Константный указатель на константные данные. Второй const, ближний к имени функции, как бы запрешает изменять значение самого указателя. Но применительно к результату функции, мы итак не можем его изменить, независимо от этого модификатора. Поэтому, также как и в случаях 2, 4 и 6, этот модификатор не вводит никаких дополнительных ограничений и является избыточным. Его можно отбросить, после чего получим вариант №1.
(5) Здесь двойная косвенность. Указатель на константный указатель на неконстантные данные. Модификатор const препятствует изменению значения переменной-указателя, адресуемого другим "наружным" указателем. Сами данные, адресуемые через двойную косвенность, можно изменять.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, Basil2, Вы писали:
B>Здравствуйте, TheAteist, Вы писали:
TA>>На что "const" влияет в функциях 1-6, т.е что "const" предотвращает в этих функциях ?
B>Добавлю что есть простое правило:
B>Const слева от "*" означает неизменность содержимого, const справа — неизменность указателя.
B>
B>const char* p;
B>char const* p;
B>char const *p; // - строку нельзя изменять
Так зачем же придумали 3 вида с тем же смыслом?
B>char* const p; // - нельзя поменять саму переменную p
B>
Здравствуйте, TheAteist, Вы писали:
TA>На что "const" влияет в функциях 1-6, т.е что "const" предотвращает в этих функциях ? TA>Спасибо.
Странно, что вопрос константности так часто возникает на форумах.
Всем, кому хочется разобраться в этом вопросе раз и навсегда, советую открыть блог Алены С++ и врубить поиск по "const".
Там несколько постов, которые очень емко и точно описывают, что такое const и с чем его едят.
Здравствуйте, TheAteist, Вы писали:
B>>Добавлю что есть простое правило: B>>Const слева от "*" означает неизменность содержимого, const справа — неизменность указателя.
B>>
Здравствуйте, elw00d, Вы писали:
E>Странно, что вопрос константности так часто возникает на форумах. E>Всем, кому хочется разобраться в этом вопросе раз и навсегда, советую открыть блог Алены С++ и врубить поиск по "const". E>Там несколько постов, которые очень емко и точно описывают, что такое const и с чем его едят.
Э, дорогой! Я специально переманивал читателей Алёны на RSDN, а ты затеял переманивать обратно?
Ну а что касается про "очень ёмко" и "раз и навсегда" — тут не соглашусь. С++ таит в себе такую мощь и бездну, что "несколькими постами" не ограничишься. Берём, например, список дефектов стандарта — и удивляемся
Здравствуйте, rg45, Вы писали:
B>>>Добавлю что есть простое правило: B>>>Const слева от "*" означает неизменность содержимого, const справа — неизменность указателя.
B>>>
Кодт:
E>>Странно, что вопрос константности так часто возникает на форумах. E>>Всем, кому хочется разобраться в этом вопросе раз и навсегда, советую открыть блог Алены С++ и врубить поиск по "const". E>>Там несколько постов, которые очень емко и точно описывают, что такое const и с чем его едят.
К>Э, дорогой! Я специально переманивал читателей Алёны на RSDN, а ты затеял переманивать обратно?
К>Ну а что касается про "очень ёмко" и "раз и навсегда" — тут не соглашусь. С++ таит в себе такую мощь и бездну, что "несколькими постами" не ограничишься. Берём, например, список дефектов стандарта — и удивляемся
+1. Вместо того, чтобы изучать C++ по чьим-то там блогам, лучше почитать книги классиков и стандарт.
Здравствуйте, Николай Ивченков, Вы писали:
НИ>Кодт:
К>>Э, дорогой! Я специально переманивал читателей Алёны на RSDN, а ты затеял переманивать обратно?
К>>Ну а что касается про "очень ёмко" и "раз и навсегда" — тут не соглашусь. С++ таит в себе такую мощь и бездну, что "несколькими постами" не ограничишься. Берём, например, список дефектов стандарта — и удивляемся
НИ>+1. Вместо того, чтобы изучать C++ по чьим-то там блогам, лучше почитать книги классиков и стандарт.
Блоги тоже полезны Во всяком случае, основы там все есть. Прекрасное дополнение к книгам классиков А стандарт читать имхо занятие чересчур сложное для тех, кто еще не разобрался с простыми вещами.