LINUX.ORG.RU

объявление функции как const

 


0

1

Всем привет, видел некоторые объявляют функцию как const, хотелось бы знать, что это дает? я так полагаю какая-то подсказка для компилятора, но для каких функций стоит такое добавлять?

Перемещено mono из talks

★★★

Ответ на: комментарий от CYB3R

а да ладно уже, нужно было в гугле посмотреть ) я сюда поместил потому-что вопрос не серьезный

Int64 ★★★
() автор топика

объявление функции как const

Int64

Смени ник на Int16.

Pavval ★★★★★
()

Всем привет, видел некоторые объявляют функцию как const, хотелось бы знать, что это дает?

Указание компилятору и самому себе, что функция не изменяет инвариант класса (для простоты считай, что не изменяет значения переменных-членов, хотя это не сомсем так). Если ты попробуешь изменить данные внутри такой функции, компилятор тебе даст по рукам. Гугли по словосочетанию const correctness.

m0rph ★★★★★
()
Ответ на: комментарий от m0rph

Если ты попробуешь изменить данные внутри такой функции, компилятор тебе даст по рукам.

Будешь использовать для нужных полей mutable — не даст.

theNamelessOne ★★★★★
()
Ответ на: комментарий от theNamelessOne

Так для того mutable и предназначен.

anonymous
()
Ответ на: комментарий от theNamelessOne

Будешь использовать для нужных полей mutable — не даст.

Я разве где-то утверждал обратное? Это и есть те подробности, о которых я решил не писать, дабы не смущать ТС'а.

m0rph ★★★★★
()
Последнее исправление: m0rph (всего исправлений: 1)
Ответ на: комментарий от m0rph

изменяет инвариант класса

Простите, что? Сохранение инварианта объекта - это сохранение его внутренней непротиворечивости. const указывает же на неизменность наблюдаемого состояния объекта. Кроме того, начиная с C++11, можно утверждать, что стандарт требует потокобезопасности константной функции-члена, см. Herb Sutter - You don't know const and mutable.

Begemoth ★★★★★
()
Последнее исправление: Begemoth (всего исправлений: 2)

Туда передаётся не T* this, а const T* this.

DELIRIUM ☆☆☆☆☆
()

Всем привет, видел некоторые объявляют функцию как const, хотелось бы знать, что это дает? я так полагаю какая-то подсказка для компилятора, но для каких функций стоит такое добавлять?

Все просто. Надо начать использовать const объекты и ссылки всюду где возможно. После этого привычка делать const-методы придет сама собой.

Внесение дополнительных ограничений, бывает, снижает количество ошибок и, иногда, выпрямляет дизайн. Кроме того, это замечательный способ не копировать большие объекты, а давать их на чтение по const-ссылке. А в случае перегрузки операторов, практически единственный.

Нарушителей можно найти поиском по const_cast, который начинает быть индикатором «бедового» кода.

ien
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.