![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Novice21 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 23.4.2008 Репутация: нет Всего: нет |
Помогите разобраться.
Имеется объект в котором описывается класс функтор
Что имеется в виду когда в параметрах конструктора класса функтора пишется оператор const (в коде выделено жирным шрифтом)? Заранее спасибо |
|||
|
||||
ShavarRsh |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 12.3.2007 Репутация: нет Всего: нет |
хм, ну тоже, что и всегда: передавая объект по ссылке, модификатор const гарантирует, что функция не изменит передаваемый объект.
Чем конструктор функтора хуже любой другой функции? |
|||
|
||||
baldina |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
параметры в функции передаются по значению. это означает, что передается копия переменной, а сама передаваемая переменная остается неизменной.
это известно. для больших структур данных передача по значению неэффективна, много копировать приходится. однако часто передаваемые параметры не модифицируются, поэтому технически более выгодно передать по ссылке (тип int только в качестве примера):
эта функция не модифицирует значение x, хотя и может, например:
если такое поведение нежелательно (в действительности мы хотим передать по значению, а ссылку используем только ради эффективности), объявляют аргумент константой:
это дает a) предотвратить ошибки, связанные с модификацией аргумента б) пользователю функции дать информацию, что семантически мы передаем по значению и в) возможно, даем компилятору доп. информацию для оптимизации Это сообщение отредактировал(а) baldina - 24.4.2008, 01:02 |
||||||||
|
|||||||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 7 Всего: 60 |
таком случае const позволяет неявное преобразование ибо вызвать конструктор с параметром не являющимся l-value и передающимся по ссылке можно только при константной ссылке. т.е. вызвать
|
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
верно
|
|||
|
||||
Novice21 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 23.4.2008 Репутация: нет Всего: нет |
Проблема на самом деле в том что имея указатель на объект foo и вызывая функтор компилятор возвращает ошибку:
не могу преобразовать указатель на foo в const указатель на foo. И вот тут я ничего не понимаю ![]() |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
код покажи
|
|||
|
||||
archimed7592 |
|
||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Так? Если да, то нужно писать так:
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |