Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
_stanislav
Рука
416 / 379 / 206
Регистрация: 16.08.2014
Сообщений: 1,701
Завершенные тесты: 2
1

Вызов operator[] через operator[] const

12.01.2017, 16:31. Просмотров 278. Ответов 5
Метки нет (Все метки)

Перелистывал Майерса, наткнулся на код, подскажите пожалуйста почему он советует закомментированный вариант кода, не проще сделать как сейчас есть?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
 
class Integer
{
public:
    const int& operator[](unsigned int i) const
    {
        std::cout << "const int& Integer::operator[](unsigned int) const"
            << std::endl;
 
        // return p[i];
        return const_cast<Integer&>(*this)[i];
    }
    int& operator[](unsigned int i)
    {
        std::cout << "int& Integer::operator[](unsigned int)"
            << std::endl;
 
        // return const_cast<int&>(static_cast<const Integer&>(*this)[i] );
        return p[i];
    }
 
private:
    int* p;
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2017, 16:31
Ответы с готовыми решениями:

char operator[](unsigned short offset) const; // что означает const?
Собстенно вопрос уже озвучен :).

Что это bool operator== (const CLASS&) const;
Что это? class CLASS { public: bool operator== (const CLASS&amp;)...

Реализация operator + через operator +=
внутри следующей темы возник вопрос, ответ на который так и не был получен:...

Operator[] и const map
Привет всем! Что за фигня? Оператор доступа по индексу не работает с...

error: invalid operands of types 'const int*' and 'const int*' to binary 'operator+'
Что означает ошибка в 8 строчке error: invalid operands of types 'const int*'...

5
Croessmah
++Ͻ
14740 / 8422 / 1597
Регистрация: 27.09.2012
Сообщений: 20,714
Записей в блоге: 2
Завершенные тесты: 1
12.01.2017, 16:38 2
_stanislav, при изменении придется делать правку в двух местах, а не в одном.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8101 / 4952 / 1436
Регистрация: 29.11.2010
Сообщений: 13,437
12.01.2017, 16:42 3
Вы хотите узнать чем каст лучше дублирования кода? Тогда ответ выше.
Если чем лучше добавление const нежели отбрасывание - это следует из простой логики. Лучше временно ограничить объект, чем дать ему права, на которые он не имеет права.
0
_stanislav
Рука
416 / 379 / 206
Регистрация: 16.08.2014
Сообщений: 1,701
Завершенные тесты: 2
18.01.2017, 22:54  [ТС] 4
Цитата Сообщение от MrGluck Посмотреть сообщение
Лучше временно ограничить объект, чем дать ему права, на которые он не имеет права.
Но даем же права тоже временно.

Добавлено через 7 минут
MrGluck, Croessmah, по большему счету же разницы никакой нет, просто не за комментированный вариант проще в написании.
0
stzer
111 / 87 / 54
Регистрация: 26.10.2013
Сообщений: 273
Завершенные тесты: 2
20.01.2017, 14:11 5
_stanislav, подскажите книгу, пожалуйста
0
_stanislav
Рука
416 / 379 / 206
Регистрация: 16.08.2014
Сообщений: 1,701
Завершенные тесты: 2
21.01.2017, 00:51  [ТС] 6
stzer, "Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ". {вырезано}
конкретней {вырезано}
0
21.01.2017, 00:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2017, 00:51

Class & operator's |Error: undefined reference to operator
Компилирует нормально, но когда хочу использовать оператор выдает...

Operator +, operator += — какой через какой реализовывать?
Для class Fraction { // ... public: Fraction operator + ( const...

operator char() или operator int()
Здорова госпдо! Снова ничо не ясно как всегда. Разбираю программку из книги...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru