Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,808
Записей в блоге: 17
#1

Const-параметры в аргументах функции - C++

13.07.2015, 19:19. Просмотров 1029. Ответов 31
Метки нет (Все метки)

Цитата Сообщение от hoggy Посмотреть сообщение
void setAmount(const int _amoutn)
А тут уже const излишен, перебор.

Добавлено через 3 минуты
C++
1
2
3
    void setDescription(const std::string& _description) { m_description = _description; }
    //...
    std::string& getDescription()                        { return m_description;  }
Зачем дублировать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2015, 19:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Const-параметры в аргументах функции (C++):

Модификатор const в аргументах функций - C++
Постоянно путаюсь в этих константах. Как писать грамотнее? Вот так: template<typename TypeT> void...

Модификатор const для параметра функции не const? - C++
void foo(const int N) { int Arr; //<-- ??? } В clang это работает. В VisualStudio 2015 нет.

const& и const* в имени функции - C++
Объясните пожалуйста что значит const& и const* в имени и параметрах функции(пример из Вандевурд,Джосаттис): template <typename T> ...

Ошибка в аргументах функции - C++
Мне нужно сделать 2 функции поиска индексов максимального и минимального элементов но почему то при вызове функции выдает ошибку ' cannot...

Вычисления функции при заданных аргументах - C++
Написать программу вычисления функции при заданных значениях аргументов. Результаты вывести экран дисплея.

int const * const foo(const int* param) const - разъясните значение квалификаторов - C++
int const * const foo(const int* param) const -----1------2----------3----------------4 1: ? 2: делает содержимое массива или...

31
DrOffset
7321 / 4421 / 1001
Регистрация: 30.01.2014
Сообщений: 7,259
14.07.2015, 22:18 #16
Цитата Сообщение от Avazart Посмотреть сообщение
Слив принят.
Детский сад какой-то, ей-богу. Общаться нормально вообще разучились?

Кстати, раз уж хочется послушать доводы за и против, то на все нужные ссылки можно найти начав отсюда. Прямую ссылку я дать не могу, из-за правил форума. Было очень объемное обсуждение на comp.lang.c++.moderated.

Прежде чем мне писать ответ, подумай о том, что помимо "за" и "против" может быть нейтральное мнение. У меня как раз такое. Сам я так не пишу, но другим бы запрещать не стал.
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,808
Записей в блоге: 17
14.07.2015, 22:23  [ТС] #17
Цитата Сообщение от DrOffset Посмотреть сообщение
Общаться нормально вообще разучились?
Ну так не засовывал свои пять копеек справедливости...
А потом мол Понтий Пилат умывает руки, и чет про нейтральное мнение ...
0
hoggy
6653 / 2841 / 486
Регистрация: 15.11.2014
Сообщений: 6,293
Завершенные тесты: 1
14.07.2015, 22:33 #18
Цитата Сообщение от Avazart Посмотреть сообщение
Вообще то что сказал Саттер довольно банально, но вероятно не для вас.
настолько банально,
что лично вы не в состоянии никак этот момент прояснить?

потому что ничего кроме: "так сказал Саттер" вы покамест сообщить не сумели.

да и не сможете вы ничего решительно по этому поводу сказать по одной простой причине:

граммар-конст в данном случае,
не имеет никаких абсолютно отличий за искл.
того, что компилятор осуществит доп. контроль.

я вам выше писал об этом.

до вас так и не дошла эта простая мысль:
это используют те, кому нужен этот доп. контроль.

все остальные соотвественно, могут не использовать.

вот и вся суть. ничего другого здесь нет, и быть не может.

Цитата Сообщение от Avazart Посмотреть сообщение
Слив принят.
деццкий сад.

Добавлено через 3 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Да лабуда это, это не человеческий фактор, а фактор-дебила который и так найдет чем "загнуть" эту ф-цию.
Как можно в пределах ф-ции можно забыть и "случайно" модифицировать ф-цию?
У вас что функции километрами?
как можно в пределах функции забыть освободить память.
как можно в пределах функции забыть проинициализировать переменную.
как можно в пределах функции забыть профакапить эксепшен.

как можно в пределах функции забыть ...

существуют железобетонные гарантии, и существуй человеческий фактор.
а дибил всегда найдется.
да и необязательно для этого быть дибилом.
вполне достаточно быть просто живым человеком.

к тому же, консты упрощают понимание кода.
мы знаем, что у нас тут все статично, ничего не меняется, никаких хз-каких то связей/побочных эффекто нет, и быть не может.
0
DrOffset
14.07.2015, 22:41
  #19

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
Ну так не засовывал свои пять копеек справедливости...
Имею полное право засовывать все, что угодно, до тех пор, пока оно не нарушает законодательство РФ и правила данного форума.
Мы в техническом разделе. Здесь могут быть разные мнения, в том числе нейтральные. Если нужны только согласие или только оппозиция, то у нас есть другие разделы.
Я высказал свое мнение о том, что явление не выдумано, и что некоторые им пользуются, а некоторые даже рекомендуют. Еще дал пару ссылок на обсуждение, там разные мнения, которые совпадают с твоим и нет. Опять же затем, чтобы обозначить, что данная проблема не однозначна и с обеих сторон (за и против) достаточно людей.

0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,808
Записей в блоге: 17
14.07.2015, 22:56  [ТС] #20
Цитата Сообщение от DrOffset Посмотреть сообщение
Я высказал свое мнение о том, что явление не выдумано, и что некоторые им пользуются, а некоторые даже рекомендуют.
Как бы быстро увиливаете от морали до закона РФ )))
Это не ваше мнение, а вырванная "цитата" Маерса, при чем искаженное, т.е деза.
На что вам я указал. Вероятно если Маерс рекомендовал бы то и сам бы использовал бы в коде, но код из книги говорит об обратном.
Логично что если вы что-то утверждаете то приводить аргументы/примеры а не закидывать:
Цитата Сообщение от DrOffset Посмотреть сообщение
Я видел проекты целиком оформленные таким образом.
А я к примеру не видел? И что ваша нейтральная точка зрения мешает вам поделится ссылкой на такой проект?

Добавлено через 1 минуту
Цитата Сообщение от hoggy Посмотреть сообщение
потому что ничего кроме: "так сказал Саттер" вы покамест сообщить не сумели.
Я уже давно сообщил, но вы по прежнему продолжая защищать свой код и сводя беседу в крайности.
0
DrOffset
7321 / 4421 / 1001
Регистрация: 30.01.2014
Сообщений: 7,259
14.07.2015, 23:14 #21
Цитата Сообщение от Avazart Посмотреть сообщение
Это не ваше мнение
Мое мнение заключается в том, что эта тема не стоит споров.
Т.к. во-первых заранее известно, что у нее два лагеря.
2) Все уже по 10 раз обсуждено.
3) Здесь неподходящее для этого место.

Цитата Сообщение от Avazart Посмотреть сообщение
вырванная "цитата" Маерса, при чем искаженное, т.е деза
Почему искаженная и где? Я полную цитату приводил выше - это абзац, законченная мысль. Причем специально на английском. Вот, извольте, на русском:
В отношении const-параметров трудно сказать что-то новое - они ведут себя как локальные const-объекты, и вы должны использовать и то и другое (оба) всегда, когда можете. Кроме тех случаев, когда вам нужно менять параметр или локальный объект, стоит убедиться, что объявили их как const. Вам всего-то придется набрать шесть символов, зато это предотвратит досадные ошибки типа «хотел напечатать ==, а нечаянно напечатал =», к чему это приводит, мы только что видели.
There's nothing particularly new about const parameters — they act just like local const objects, and you should use both whenever you can. Unless you need to be able to modify a parameter or local object, be sure to declare it const. It costs you only the effort to type six characters, and it can save you from annoying errors such as the "I meant to type '==' but I accidently typed '='" mistake we just saw.
Добавлено через 5 минут
Цитата Сообщение от Avazart Посмотреть сообщение
И что ваша нейтральная точка зрения мешает вам поделится ссылкой на такой проект?
Большинство проектов, которые я видел, имеют закрытую лицензию, так что нет, поделиться ссылкой я не могу. Придется поверить мне на слово. Про проект я написал опять же к тому, чтобы показать, что в этом вопросе два лагеря (целые команды, которые такое исповедуют), а не один лишь hoggy. По идее это должно было сподвигнуть тебя закончить спор из-за его нарастающей бессмысленности (давайте сейчас докажем всем мусульманам, что им нужно верить в Христа - грубое сравнение, но бессмысленность такая же). Но это не сработало, потому что ты, видимо, сторонник крестовых походов.
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,808
Записей в блоге: 17
14.07.2015, 23:35  [ТС] #22
Цитата Сообщение от DrOffset Посмотреть сообщение
давайте сейчас докажем всем мусульманам, что им нужно верить в Христа - грубое сравнение,
Цитата Сообщение от DrOffset Посмотреть сообщение
Придется поверить мне на слово.
Я не полагаюсь на веру, я полагаюсь на опыт/факты которые вы не привели, поэтому это воспринимаю не иначе как слив.
И да, я не считаю авторитетной треп на каком то форуме, для меня куда более авторитетны слова члена комитета по стандартизации или тот же код из примеров книг, кода STL итд.
Цитата Сообщение от DrOffset Посмотреть сообщение
Почему искаженная и где? Я полную цитату приводил выше - это абзац, законченная мысль.
Т.е. вы закрываете глаза на код примеров из книги?
0
DrOffset
7321 / 4421 / 1001
Регистрация: 30.01.2014
Сообщений: 7,259
14.07.2015, 23:51 #23
Цитата Сообщение от Avazart Посмотреть сообщение
Я не полагаюсь на веру
Это была метафора, про Христа. Вера тут не при чем.
Есть два лагеря:
1) Товарищи, ставящие const в аргументах делают это для повышения, по их мнению, самодокументируемости кода.
2) Товарищи, которые не считают это полезным, убеждены что в коротких функциях итак понятно, меняется параметр или нет, а длинные писать вообще не стоит.

Собственно, что дальше? Вопрос риторический, ибо ответ - ничего. Они будут независимо от нашего здесь общения.

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

Цитата Сообщение от Avazart Посмотреть сообщение
Т.е. вы закрываете глаза на код примеров из книги?
Дело в том, что в книге у него множество вопросов освещено. И код иллюстрирует эти вопросы, код не должен быть эталоном, он должен освещать тему, а не загромождать. Поэтому, я не считаю, что код из его книги мог бы быть показательным. Хотя вот в правиле 46 он делает константными возвращаемые значения и ссылается на правило 3. Это не совсем то, что мы тут обсуждаем, но близко. Я лично тоже не могу припомнить, когда мне требовалось возвращаемые по значению объекты делать константными. Но я понимаю его мотивацию. Т.е. в книге все-таки есть примеры, иллюстрирующие правило 3. Там, где это к месту.
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,808
Записей в блоге: 17
15.07.2015, 00:11  [ТС] #24
Цитата Сообщение от DrOffset Посмотреть сообщение
Это была метафора, про Христа. Вера тут не при чем.
На метафору - метофорой.

Цитата Сообщение от DrOffset Посмотреть сообщение
Есть два лагеря:
Неужели ? Где покажите мне первых? Покажите мне их код.

Цитата Сообщение от DrOffset Посмотреть сообщение
Мнение Мэйерса, которое не столь категоричное, как у Саттера.
Это не означает что оно именно в этом контексте уместно. Если вообще говорить главе там обсуждалось только указатели/ передача по кост ссылке и возврат, про передачу по конст значению вроде ничего нет.

Цитата Сообщение от DrOffset Посмотреть сообщение
Дело в том, что в книге у него множество вопросов освещено.
Покажите хотя бы один пример.

Цитата Сообщение от DrOffset Посмотреть сообщение
Дело в том, что в книге у него множество вопросов освещено. И код иллюстрирует эти вопросы, код не должен быть эталоном, он должен освещать тему, а не загромождать. Поэтому, я не считаю, что код из его книги мог бы быть показательным.
А каким он должен быть?
Чего стоят советы того кто сам им не следует при чем не делая оговорок?
0
DrOffset
7321 / 4421 / 1001
Регистрация: 30.01.2014
Сообщений: 7,259
15.07.2015, 00:26 #25
Цитата Сообщение от Avazart Посмотреть сообщение
Чего стоят советы того кто сам им не следует при чем не делая оговорок?
Мэйерс так-то вообще не программист - он преподаватель. Он никогда не писал в команде и вообще не работал программистом серьезно. Он всю жизнь спрашивает других, о их опыте. Потом пишет на основе этого книги. Стоит ли верить человеку не закончившему ни одного серьезного проекта? Этот вопрос каждый сам для себя разрешит.

Задача каждого правила в его книге донести суть. Непоказательно было бы засовывать туда все что можно, ради того, чтобы доказать, что ты не забыл о чем писал три правила назад. Поэтому в его примерах только то, что относится к обсуждаемым в них проблемам.
Цитата Сообщение от Avazart Посмотреть сообщение
Это не означает что оно именно в этом контексте уместно.
Может и не уместно. Я, если ты не забыл, не придерживаюсь этого правила.

Цитата Сообщение от Avazart Посмотреть сообщение
Где покажите мне первых? Покажите мне их код.
Т.е. ты предлагаешь сейчас мне все бросить и начать срочно шерстить интернет на наличие библиотек с таким подходом? Ты это серьезно? И даже если я найду что-то такое, то с вероятностью 99% ты скажешь, что это какая-то недоделанная наколеночная работка, которая не может служить репрезентативным примером. Так и будет.
Я сужу о наличии лагеря по количеству вопросов и дискуссий, которые возникают на эту тему. Если бы лагеря не было, то никто не отстаивал бы эту точку зрения. Никто бы не писал вот таких постов: http://stackoverflow.com/a/117557 и никто бы их не апал.

Мое мнение понятно? Если да, то я вас оставлю.
 Комментарий модератора 
Не озоруйте тут.
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,808
Записей в блоге: 17
15.07.2015, 00:43  [ТС] #26
Цитата Сообщение от DrOffset Посмотреть сообщение
Мэйерс так-то вообще не программист - он преподаватель.
Стоп ... вы же его приводили ради справедливости, а не я.
Цитата Сообщение от DrOffset Посмотреть сообщение
Т.е. ты предлагаешь сейчас мне все бросить
Я предлагаю не бросать... слова на ветер...
Ведь было время что бы залезь в оригинал книги Майерса ...

Добавлено через 5 минут
Цитата Сообщение от DrOffset Посмотреть сообщение
Я сужу о наличии лагеря по количеству вопросов и дискуссий, которые возникают на эту тему. Если бы лагеря не было, то никто не отстаивал бы эту точку зрения. Никто бы не писал вот таких постов: http://stackoverflow.com/a/117557 и никто бы их не апал.
Что бы создавать посты и их подымать, достаточно новичков.
0
DrOffset
7321 / 4421 / 1001
Регистрация: 30.01.2014
Сообщений: 7,259
15.07.2015, 00:48 #27
Цитата Сообщение от Avazart Посмотреть сообщение
Ведь было время что бы залезь в оригинал книги Майерса
Она у меня на полке стоит. Это было несложно.

Цитата Сообщение от Avazart Посмотреть сообщение
вы же его приводили ради справедливости, а не я.
Справедливость в том, что есть разные мнения. Саттер написал почти однозначно, что не стоит
Цитата Сообщение от Avazart Посмотреть сообщение
Избегайте const в объявлениях функций, принимающих параметры по значению.
, Мэйерс написал почти однозначно - стоит.
Цитата Сообщение от DrOffset Посмотреть сообщение
В отношении const-параметров трудно сказать что-то новое - они ведут себя как локальные const-объекты, и вы должны использовать и то и другое (оба) всегда, когда можете.
Сомневаться в их (и Саттера и Мэйерса) компетентности у меня нет причин - никаких. Но я указал, что Мэйерс не программист затем, чтобы у тебя не возникло ложных предположений, будто я на него молюсь. Если же у тебя есть основание не доверять его мнению из-за этого факта, то - это твое право.

Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
Что бы создавать посты и их подымать, достаточно новичков.
Насчет тематики "заговора накрутчиков" - это не ко мне (только если это происходит не на нашем форуме ).
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,808
Записей в блоге: 17
15.07.2015, 00:51  [ТС] #28
Цитата Сообщение от DrOffset Посмотреть сообщение
Мэйерс написал почти однозначно - стоит.
А что на заборе пишут?
Вы буквально вырвали цитату из контекста, ради притянутой справедливости.
0
DrOffset
7321 / 4421 / 1001
Регистрация: 30.01.2014
Сообщений: 7,259
15.07.2015, 00:57 #29
Цитата Сообщение от Avazart Посмотреть сообщение
Вы буквально вырвали цитату из контекста, ради притянутой справедливости.
Ты так и не объяснил из какого контекста я ее вырвал? Еще раз говорю - это абзац. Абзацем обозначают законченную мысль. В этом абзаце шла речь про параметры с const. Я его полностью процитировал.

Процитируй пожалуйста фразу из его книги так, чтобы был виден контекст, который я потерял.
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,808
Записей в блоге: 17
15.07.2015, 01:01  [ТС] #30
Цитата Сообщение от DrOffset Посмотреть сообщение
В этом абзаце шла речь про параметры с const.
Цитата Сообщение от Avazart Посмотреть сообщение
Это не означает что оно именно в этом контексте уместно. Если вообще говорить главе там обсуждалось только указатели/ передача по кост ссылке и возврат, про передачу по конст значению вроде ничего нет.
???
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2015, 01:01
Привет! Вот еще темы с ответами:

Вычислить значение функции при разных аргументах, Visual C++ - C++
Всем привет! Нужно написать программку на вычисление функции, но незнаю с чего начать и чем закончить, только начал учить С++ :( Ребята,...

Как узнать параметры изображения, если оно представлено в виде const void* и размера данных - C++
Доброго. Собственно проблема в шапке. Файл изображения скачивается из интернета. Смотрел в сторону GDIplus, ничего путного пока не...

Отличие Myclass& от Myclass* в аргументах функции - C++
Доброго времени суток. Новичок в С++ (раньше писал на всяких питонах и пхп). Очень нравится язык, прям каждый раз, когда что-то новое...

Const после функции - C++
Здравствуйте! Объясните, пожалуйста, что делает тут const: double GetFrequency () const { return m_frequency; } ...


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

Или воспользуйтесь поиском по форуму:
30
Yandex
Объявления
15.07.2015, 01:01
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru