Название: Для чего нужно возвращать константное значение в методах? Отправлено: billygates от Май 09, 2011, 07:15 Привет,
Когда может потребовать такое: Код вместо Код ? Ведь все равно возврат происходит по значению. Если бы по ссылке -- то было бы понятно. Спасибо. Название: Re: Для чего нужно возвращать константное значение в методах? Отправлено: Igors от Май 09, 2011, 08:58 Потребоваться может в тех же случаях что и со ссылкой, напр
Код Не хотим чтобы appPath затем менялось - это ошибка. Но возвращать его по ссылке неудобно - если такой переменной нет. Пришлось бы городить как-то так Код
Название: Re: Для чего нужно возвращать константное значение в методах? Отправлено: Sancho_s_rancho от Май 09, 2011, 11:02 2 Igors
Что-то я вашего примера не понял. Может ,конечно, праздники так действуют. Вы инициализируете константу. Все равно, что справа возвращается const или не const объект. От этого вашему appPath не холодно, не жарко. Разница есть в таком случае: Код: struct foo Название: Re: Для чего нужно возвращать константное значение в методах? Отправлено: billygates от Май 09, 2011, 11:13 2 Igors Аналогично. Вполне себе можно менять, как я только что проверил на примереЧто-то я вашего примера не понял. Может ,конечно, праздники так действуют. Код
Разница есть в таком случае: Спасибо за пример, стало немного понятно. Однако пока это не отменяет для меня синтетичности такой возможности. Может, пожалуйста, кто-то нибудь привести пример из жизни (STL, Qt), когда такое действительно применяется и без этого не обойтись?Название: Re: Для чего нужно возвращать константное значение в методах? Отправлено: Igors от Май 09, 2011, 12:12 2 Igors Пример когда станет холодно Что-то я вашего примера не понял. Может ,конечно, праздники так действуют. Вы инициализируете константу. Все равно, что справа возвращается const или не const объект. От этого вашему appPath не холодно, не жарко. Код
Название: Re: Для чего нужно возвращать константное значение в методах? Отправлено: Sancho_s_rancho от Май 09, 2011, 12:40 Только причем тут возвращение константного объекта, о котором спрашивал billygates?
В последнем примере возвращается ссылка на временный объект. Возвратить можно ссылку или указатель (это одно и тоже) с const или без него. В любом случае код приведет к беде, т.к. объект уничтожен. Название: Re: Для чего нужно возвращать константное значение в методах? Отправлено: brankovic от Май 09, 2011, 13:14 Разница есть в таком случае: ... В последнем варианте ( foobar2().bar(); ) у вас будет ошибка. пример правильный, но в реальности такую конструкцию невозможно использовать по делу (не видел нормального применения ни разу). Когда в коде вижу Код
то так оцениваю варианты: 1. с вероятностью .9 автор идиот 2. с вероятностью .09 автор недавно изучил слово const и ставит его везде, где можно 3. с вероятностью .009 в проекте идиотский coding standart 4. в случае сложных типов всегда остаётся шанс, что это и правда нужно.. лучше внимательно изучить этот кусок кода в общем лучше так не делать никогда, чтобы читающему не пришлось ломать голову над вашими экзерцисами Название: Re: Для чего нужно возвращать константное значение в методах? Отправлено: ieroglif от Май 09, 2011, 14:00 Код работает оно так: const T * name; - это "на константную Т указатель". это значит что сама переменная name не константна, и в неё можно записать адрес другого объекта, но с объектом, который расположен по этому указателю надо обращаться как с константным, т.е. нельзя вызывать "не const" методы, способные повлиять на внутреннее состояние объекта. T * const name; - это "константный указатель на T". соответсвенно сама переменная name константна и изменена быть не может, но объект на который она указыват - "динамичен" :) соответсвенно из этого уже и использование: если я хочу вернуть из метода что-то такое, что совсем не надо изменять - я обзову const T Object::method(); и буду спокоен что всё ок :) так что используется в проектировании классов :) Название: Re: Для чего нужно возвращать константное значение в методах? Отправлено: brankovic от Май 09, 2011, 14:10 так что используется в проектировании классов :) а ещё при проектировании классов полезно: писать пустой конструктор, когда он не нужен (2 раза) писать inline, который не нужен (2 раза) возвращать const A* из неконстантного метода приводить пример с const A *, когда вопрос был про A * const Название: Re: Для чего нужно возвращать константное значение в методах? Отправлено: Igors от Май 09, 2011, 14:13 Только причем тут возвращение константного объекта, о котором спрашивал billygates? Отвечаю на то что спросили? Ведь все равно возврат происходит по значению. Если бы по ссылке -- то было бы понятно. Не всегда удается заменить на возврат константной ссылки. Может, пожалуйста, кто-то нибудь привести пример из жизни (STL, Qt), когда такое действительно применяется и без этого не обойтись? Ну обойтись можно без очень многого (и без const вообще), а когда это имеет смысл - найти примеры несложноКод
Код
Название: Re: Для чего нужно возвращать константное значение в методах? Отправлено: brankovic от Май 09, 2011, 15:28 // чтобы пресечь Код
пришлось заодно присечь полезное GetMap ().swap (m); Кроме того, умный пользователь сделает Map m = GetMap (); и понаставит [] сколько захочет. Хороший пример дайте, где это естественно и от чего-то спасает. Название: Re: Для чего нужно возвращать константное значение в методах? Отправлено: Igors от Май 10, 2011, 08:04 Кроме того, умный пользователь сделает Map m = GetMap (); и понаставит [] сколько захочет. Хороший пример дайте, где это естественно и от чего-то спасает. Да хотя бы такКод Надо понимать что автор хотел сказать - возвращаемый вектор должен использоваться "как есть", только по чтению. Конечно ф-ция могла возвращать и не константу, но это так в любом случае Код Не делаем же мы вывод что возвращать константную ссылку избыточно, т.к. мы ее можем всегда ее получить из неконстантной. Эти 2 примера по существу идентичны, просто один широко известен, другой нет - отсюда и противоположная оценка :) Код
то так оцениваю варианты: 1. с вероятностью .9 автор идиот Название: Re: Для чего нужно возвращать константное значение в методах? Отправлено: Akon от Май 10, 2011, 15:13 Привет, Когда может потребовать такое: Код вместо Код ? Ведь все равно возврат происходит по значению. Если бы по ссылке -- то было бы понятно. Спасибо. Да просто пресекает никчемные конструкции, наподобие таких: Код: myMethod().clear(); Название: Re: Для чего нужно возвращать константное значение в методах? Отправлено: Anchorite от Май 12, 2011, 17:39 Это сделано затем, чтобы случайно не написать ахинею типа
Код: Class.myMethod() = something. А получть это можно просто допустив опечатку при записи оператора сравнения. |