Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2015, 13:59   #1
chipside
Форумчанин
 
Регистрация: 03.08.2013
Сообщений: 208
По умолчанию Зачем в конце заголовка функции добавляется ключевое слово const?

В чём отличие
Код:
void f ( void ) {
cout << "Hello" << endl;
}
от
Код:
void f ( void ) const {
cout << "Hello" << endl;
}
?
chipside вне форума Ответить с цитированием
Старый 01.12.2015, 14:29   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,760
По умолчанию

const там говорит: "я не изменяю объект"
p51x вне форума Ответить с цитированием
Старый 01.12.2015, 14:34   #3
chipside
Форумчанин
 
Регистрация: 03.08.2013
Сообщений: 208
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
const там говорит: "я не изменяю объект"
Благодарю за пояснение.
А почему во многих примерах пишут
Код:
virtual f (void) const;
, а не
Код:
//virtual const f (void);
virtual const int f (void);
и можно ли совместить так
Код:
//virtual f const f (void) const;
virtual const int f (void) const;
?
Или так
Код:
//virtual f const f (int a) const {return a};
virtual const int f (int a) const {return a};
?

Последний раз редактировалось chipside; 01.12.2015 в 15:00.
chipside вне форума Ответить с цитированием
Старый 01.12.2015, 14:40   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,760
По умолчанию

Цитата:
А почему во многих примерах пишут
Код:

virtual f (void) const;

, а не

virtual const f (void);
Потому что есть разница между "я функция, которая не изменяет объект" и "я функция, которая возвращает что-то константное".

Цитата:
и можно ли совместить так
Если отбросить бредовость вашей записи, то формально можно - функция может не изменять объект и возвращать что-то константное
p51x вне форума Ответить с цитированием
Старый 01.12.2015, 14:56   #5
chipside
Форумчанин
 
Регистрация: 03.08.2013
Сообщений: 208
По умолчанию

Да, забыл указать тип функции.
Спасибо. Понял.
---
Код:
//virtual const int ( int a ) const {
virtual const int function_f ( int a ) const {
 return a;
} //const

Последний раз редактировалось chipside; 01.12.2015 в 15:01.
chipside вне форума Ответить с цитированием
Старый 01.12.2015, 14:59   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,760
По умолчанию

Третий конст лишний
p51x вне форума Ответить с цитированием
Старый 01.12.2015, 15:01   #7
chipside
Форумчанин
 
Регистрация: 03.08.2013
Сообщений: 208
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Третий конст лишний
Спс!
Я немного рассеянный...
chipside вне форума Ответить с цитированием
Старый 01.12.2015, 15:08   #8
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
В чём отличие
это
Код:
void f ( void ) const {
cout << "Hello" << endl;
}
вообще не скомпилируется. Это актуально только для не статических функций-членов класса.
Croessmah вне форума Ответить с цитированием
Старый 01.12.2015, 15:12   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,760
По умолчанию

Croessmah, думаю это очевидно, раз даже в "определении" "я функция, которая не изменяет объект" есть объект
p51x вне форума Ответить с цитированием
Старый 01.12.2015, 19:59   #10
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

p51x,l функция != функция-член
ну и в таких функциях-членах можно даже без всяких кастов менять mutable члены, так состояние объекта может меняться.

Последний раз редактировалось Croessmah; 01.12.2015 в 20:03.
Croessmah вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в конце моей строки добавляется абракадабра ilvErsat0 Общие вопросы C/C++ 3 21.04.2013 16:51
Ключевое слово в с++ Юлия Набиева Помощь студентам 3 12.03.2013 14:36
Ключевое слово out в вызове функции. Указатели Cerebrum C# (си шарп) 3 14.01.2012 00:25
зачем нужно ипользовать ключевое слово super? Syltan Общие вопросы по Java, Java SE, Kotlin 16 20.05.2010 19:06