Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » [решено] Основы C++ | Использование operator[int, ...]

Ответить
Настройки темы
[решено] Основы C++ | Использование operator[int, ...]

Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85


Конфигурация

Профиль | Отправить PM | Цитировать


Тут забавный такой момент был...

Класс (пусть будет class A) использовал для доступа к массиву своих данных int& A::operator(int, ...). Всё работало, но у класса были ещё несколько конструкторов вида A::A(int i, int j), A::A(int i, int j, int k), плюс это был шаблон класса... В общем, решили "сумничать", повысить читаемость кода. Ну и заменили "()" на "[]" :-) Потом, конечно, пришлось всё возвращать обратно, так как оператор индексирования работает только с одним параметром. Но вот что интересно...

Когда мы писали так:
Код: Выделить весь код
class A {
public:
  A(int, int);
  int& operator[](int, int);
};
, компилятор (gcc v3.3.3) ругался ошибкой. А когда написали так:
Код: Выделить весь код
class A {
public:
  A(int, int);
  int& operator[](int, ...);
};
, стал ругатся лишь предупреждением!

Вопрос такой теперь мучает. А насколько вообще корректно писать operator[](int, ...), если известно (точно), что все "передаваемые" при вызове аргументы попросту игнорируются компилятором. Может, это всё-таки _ошибка_ должна быть?

И второй вопрос :] А куда деваются параметры при вызове { A a(0,0); a[1, 2, 3, 4]; }, например? Никто не видел сгенерированный assm-текст для подобного? Или "1,2,3,4" интерпретируются как последовательность операторов через запятую?

Отправлено: 14:32, 28-09-2006

 

редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Цитата:
"1,2,3,4" интерпретируются как последовательность операторов через запятую
По поводу основного вопроса - ничего не знаю. Для повышения читаемости, при реализации operator[] для доступа к двумерным массивам, принято возвращать ещё один объект, с перегруженным operator[], который уже и произведёт доступ. Компиляторы нонче шибко умные - наверняка это прекрасно оптимизируется (если A:perator[] inline'овый).

Подумалось, а если попробовать. Вызвать a.operator[](0,0)? Сам только что проверил. Результаты:
g++ 3.3.6 - позволяет объявить operator[](int, ...) и вызывать его явным образом с любым числом парамтеров. Ни на что не ругается, ни о чём не предупреждает с -Wall.
g++ 4.1.1 - ругается на объявление operator[](int, ...).

Так что, скорее всего, так делать нельзя совсем.

-------
http://ivank.ru

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:07, 28-09-2006 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


>> возвращать ещё один объект, с перегруженным operator[]

Не, у _нас_ так не получится. Да Б@г с ним.

>> g++ 4.1.1 - ругается на объявление operator[](int, ...).

Вот оно! Спасибо :-)

Отправлено: 15:20, 28-09-2006 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » [решено] Основы C++ | Использование operator[int, ...]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - [решено] Как сгенерировать случайное число на всем диапазоне значений int? Michael Программирование и базы данных 14 04-02-2011 17:08
C/C++ - [решено] int в AnsiString crashtuak Программирование и базы данных 7 30-03-2009 02:11
Разное - [решено] PHP - основы delog Программирование и базы данных 1 09-03-2009 17:04
[решено] Aver TV studio TV/FM, PCI, INT проблема с записью, и непонятно какая это модель rizz Непонятные проблемы с Железом 20 15-11-2006 08:44
Основы C++ | Перегрузка operator+ для m_string Skrip Программирование и базы данных 1 10-08-2005 13:41




 
Переход