1 | ||||||
Const-параметры в аргументах функции13.07.2015, 19:19. Показов 4397. Ответов 31
Метки нет (Все метки)
А тут уже const излишен, перебор.
Добавлено через 3 минуты
0
|
13.07.2015, 19:19 | |
Ответы с готовыми решениями:
31
Модификатор const в аргументах функций Модификатор const для параметра функции не const? const& и const* в имени функции Ошибка в аргументах функции |
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
13.07.2015, 19:25 | 2 | |||||
технически - да, излишний.
однако, квалификатор конст нужен не компилятору, а человеку. граммар-конст подразумевает по максимому использовать константы. пример:
подробности вы можете прочитать в книге Макконелла "Идеальный код". чего дублировать? вы имеете ввиду, зачем мутабельный геттер, если есть сеттер? в этом смысле замечание верное. совершенно не зачем. мутабельные геттеры можно удалить.
0
|
13.07.2015, 19:35 [ТС] | 3 |
Как раз человеку он навиг не нужен.
http://bookscafe.net/read/satt... idp1114480 Добавлено через 3 минуты Вероятно что-то одно стоит использовать пару гетер/сеттер и или пару по ссылке/константной ссылке.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
13.07.2015, 20:02 | 4 |
1.
здрасти приехали. вы ещё скажите, что модификаторы доступа public/protected/private тоже нафиг человеку не нужны. наверное, это какая то особая магия, без которой компилятор не в состоянии работать. 2. при этом вы аппелируете к Саттеру, который как раз таки призывает к граммар-конст.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
13.07.2015, 20:44 | 6 |
интересно, и чем это таким он может быть дезоринтирован?
передавать константу, а потом снимать конст при помощи const_cast - вот это - дезориентация. оттуда же:
0
|
13.07.2015, 20:50 [ТС] | 7 | |||||
Речь шла о
Добавлено через 2 минуты Излишеством, да и ф-ция не становится короче/лаконичнее от таких записей.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||||||||||
14.07.2015, 12:33 | 8 | ||||||||||||||||||||
нигде.
согласно граммар-конст, правило формулируется, как: "все, что не должно быть изменено (не будет меняться), должно быть константами" и это правило - универсально. приняв за правило делать константами все, что измениться не должно, мы следуем эту стилю во всем. чушь. кстати, конст не является излишеством. например, в стародавние временя он помогал убогим компиляторам оптимизировать. ваше "лаконично/короче" не имеет никакого отношения к дезориентации. ------------------------------------------------------------------------------------------------ на самом деле, вы далеко не первый, кто отсылал меня к Саттеру. но ни вы, ни кто другой, так и не смогли ответить на этот вопрос. а вот я могу. хотите? посмотрите внимательно, и скажите, чем отличаются эти две функции?
в первом случае, программист вежливо попросил компилятор проконтролировать, что внутри функции значение аргумента не должно быть изменено. и это - единственное отличие. а полном смысле этого слова. у этих функций одна и та же сигнатура. правило звучит так: "в сигнатуре функции квалификатор конст не учитывается для параметров по значению". таким образом имеем:
либо: http://rextester.com/YOJVM30406
однако сказать, что это как то может дезорентировать - по меньше мене глупо. потому что: 1. об этом нюансе языка вообще не каждый программист знает. не каждый вообще когда нибудь с этим сталкивался воочию. и об этом почему то не писал ваш любимый Саттер. верно, вы ему наслово поверили? 2. с таким же успехом можно сказать, что const в указателях дезорентирует (новички часто путаются: справа/слева от звездочки). на самом деле это - синтаксис языка. не больше и не меньше.
2
|
14.07.2015, 13:02 [ТС] | 9 |
Я указал на конкретную ф-цию, так что не нужно съесжать и выдумывать/впадать в крайности и писать про const с указателями.
По моему логично что все лишние телодвижения дезаориентируют. Не по теме:
Добавлено через 2 минуты Вообще лично для меня загадка, в каких случаях такое требуется, и задается вопрос что у человека такая короткая память, что он внутри ф-ция якобы забудет и случайно изменит переменную. Добавлено через 13 минут Как не написал?
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||
14.07.2015, 19:49 | 10 | ||||||||||
я никуда не съезжаю, и не выдумываю.
я раскрываю свою точку зрения: нет места дезоринтации. я ещё понимаю, если б вы написали что нить вроде:
хотя на самом деле это объявление и определение одной функции. все компилится и прекрасно работает. а выглядит по разному. но вы же этого не написали. единственный ваш довод: "так сказал Саттер". а если бы Саттер сказал: "убейтесь все об стенку"? Саттер нефига не пояснил свою точку зрения. его утверждение голословно. --------------------------------------------------------------- а телодвижения телодвижениям рознь. писать вручную сеттеры и геттеры - это тоже телодвижения. в конкретно взятом как лишние телодвижения. с граммар-конст - аналогично. я специально подчеркиваю мысль: правило унифицированно. "все, что не должно меняться - должно быть const". согласно граммар-конст, должны быть основание посерьезнее собственной лени, что бы отходить от этого правила. точно так же, как должны быть веские причины, что бы отказаться от сеттеров/геттеров. гарантирует (путем исключения человеческого фактора) четкое разделение данных: на внутреннее состояние автомата, и входные/выходные параметры. что привентивно сокращает стоимость отладки и сопровождения. нет, он - крутой хацкер. пишет идеальный код с первого же раза, и никогда не ошибается. вы походу не вдупаляете, зачем вообще был изобретен квалификатор const. ух ты, и в правду написал. но как то не раскрыл тему. и ни вы, никто другой почему то так и не смогли внятно её раскрыть. я о дезорентации. Не по теме: не путайте "квалификатор" и "модификатор". модификаторы представлены вот здесь: http://en.cppreference.com/w/cpp/language/types
0
|
14.07.2015, 19:58 [ТС] | 11 |
Вообще то что сказал Саттер довольно банально, но вероятно не для вас.
Да лабуда это, это не человеческий фактор, а фактор-дебила который и так найдет чем "загнуть" эту ф-цию. Как можно в пределах ф-ции можно забыть и "случайно" модифицировать ф-цию? У вас что функции километрами?
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
|
14.07.2015, 21:14 | 12 |
Справедливости ради, Скотт Мэйерс придерживается схожего с твоим оппонентом мнения (Effective С++, third edition).
Item 3: Use const whenever possible Я думаю, эта тема не стоит таких ожесточенных споров. Так что, ребята, давайте закругляться, а то придется вырезать ваши разговоры и выпуливать их в священные войны.
0
|
14.07.2015, 21:43 [ТС] | 13 |
Справедливости ради стоило прочитать ссылку на Саттера для начала он говорит ровным счетом тоже самое, но только с поправками, но кому для понимания банальщины и этого мало. Ну до ладно...
Ок, что бы не быть многословным, если вы уже взяли книгу Мэйерса то может мне покажите хоть один пример кода в его книге (да и вообще из какой нибудь адекватной либы) где const бездумно пихался в параметры ф-ции передаваемые по значению?
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
|
14.07.2015, 22:06 | 14 |
Я с тобой спорить не собираюсь. Я привел цитату, где Мэйерс в отличие от Саттера оговорок не делал. Он наоборот написал "должны"
Я не говорю, что я согласен с ним, но и не говорю, что не согласен. Я привел источник, выводы делай из него сам. А подобные споры меня интересуют мало.
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
|
14.07.2015, 22:18 | 16 |
Детский сад какой-то, ей-богу. Общаться нормально вообще разучились?
Кстати, раз уж хочется послушать доводы за и против, то на все нужные ссылки можно найти начав отсюда. Прямую ссылку я дать не могу, из-за правил форума. Было очень объемное обсуждение на comp.lang.c++.moderated. Прежде чем мне писать ответ, подумай о том, что помимо "за" и "против" может быть нейтральное мнение. У меня как раз такое. Сам я так не пишу, но другим бы запрещать не стал.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
14.07.2015, 22:33 | 18 |
настолько банально,
что лично вы не в состоянии никак этот момент прояснить? потому что ничего кроме: "так сказал Саттер" вы покамест сообщить не сумели. да и не сможете вы ничего решительно по этому поводу сказать по одной простой причине: граммар-конст в данном случае, не имеет никаких абсолютно отличий за искл. того, что компилятор осуществит доп. контроль. я вам выше писал об этом. до вас так и не дошла эта простая мысль: это используют те, кому нужен этот доп. контроль. все остальные соотвественно, могут не использовать. вот и вся суть. ничего другого здесь нет, и быть не может. деццкий сад. Добавлено через 3 минуты как можно в пределах функции забыть освободить память. как можно в пределах функции забыть проинициализировать переменную. как можно в пределах функции забыть профакапить эксепшен. как можно в пределах функции забыть ... существуют железобетонные гарантии, и существуй человеческий фактор. а дибил всегда найдется. да и необязательно для этого быть дибилом. вполне достаточно быть просто живым человеком. к тому же, консты упрощают понимание кода. мы знаем, что у нас тут все статично, ничего не меняется, никаких хз-каких то связей/побочных эффекто нет, и быть не может.
0
|
DrOffset
|
14.07.2015, 22:41
#19
|
Не по теме: Имею полное право засовывать все, что угодно, до тех пор, пока оно не нарушает законодательство РФ и правила данного форума. Мы в техническом разделе. Здесь могут быть разные мнения, в том числе нейтральные. Если нужны только согласие или только оппозиция, то у нас есть другие разделы. Я высказал свое мнение о том, что явление не выдумано, и что некоторые им пользуются, а некоторые даже рекомендуют. Еще дал пару ссылок на обсуждение, там разные мнения, которые совпадают с твоим и нет. Опять же затем, чтобы обозначить, что данная проблема не однозначна и с обеих сторон (за и против) достаточно людей.
0
|
14.07.2015, 22:56 [ТС] | 20 |
Как бы быстро увиливаете от морали до закона РФ )))
Это не ваше мнение, а вырванная "цитата" Маерса, при чем искаженное, т.е деза. На что вам я указал. Вероятно если Маерс рекомендовал бы то и сам бы использовал бы в коде, но код из книги говорит об обратном. Логично что если вы что-то утверждаете то приводить аргументы/примеры а не закидывать: А я к примеру не видел? И что ваша нейтральная точка зрения мешает вам поделится ссылкой на такой проект? Добавлено через 1 минуту Я уже давно сообщил, но вы по прежнему продолжая защищать свой код и сводя беседу в крайности.
0
|
14.07.2015, 22:56 | |
14.07.2015, 22:56 | |
Помогаю со студенческими работами здесь
20
Вычисления функции при заданных аргументах int const * const foo(const int* param) const - разъясните значение квалификаторов Вычислить значение функции при разных аргументах, Visual C++ Как узнать параметры изображения, если оно представлено в виде const void* и размера данных Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |