![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
В большинстве случаев это верно. Но иногда удобна перегрузка без следования этим правилам. boost::asign, boost::lambda, boost::optiona, etc. - в качестве примеров. |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Это дискуссия, безконечна...
Спорить не буду, за - то же. Как не крути, но в перегрузке "oprator ," больше негатива, чем позитива. Так же, перегрузка "||" и "&&" вносит больше подозрений, непонятки, в код ее использующий. Зачем забивать себе голову еще и тем что, нужно помнить что эти операторы перегружены, когда и так у программера в голове, полно всякой полезной, и безполезной информации. Ведь проще написать пару лишних строк, чем забивать себе голову...(имхо) -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
оператор "запятая" возвращает значение последнего аргумента ![]() |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
неперегруженый, а перегруженый, может вернуть что угодно ![]() |
|||
|
||||
d06osipov |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 1.11.2006 Репутация: нет Всего: нет |
Согласен. Но в большинстве случаев, программист знает, на что он идёт. И, скажем, если вы разрабатываете библиотеку, перегрузка оператора "," может испортить программу при подключении только в том случае, если: 1. Этот оператор объявлен все namespace, или используется using namespace (в противном случае, при уже существующей встроенной реализации "," будет выбираться пользовательская только в том случае, когда один из операндов имеет тип, находящийся в этом namespace, что не навредит. См. разрешение имён) 2. Этот оператор объявлен для типов, существующих вне библиотеки, например: template<class T,class S> T& operator , (const T&,const S&); //так делать не надо В Boost этот оператор применяется при левом аргументе имеющем совершенно скрытый тип, о котором пользователь даже не знает. Следовательно, этот оператор не может помешать правильной работе программы. Оператор "," полезно использовать вместо эллипса! Но надо быть осторожнsм, чтобы компилятор не воспринял , за знак отделения аргументов функции:
Т. о. Перегружать оператор , следует только в том случае, когда тип одного из операндов --- класс, к которому больше никак обращаться не следует. |
||||
|
|||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
||||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Нет, как раз в данном случае сработает вызов функции с двумя параметрами. Поэтому использование запятой как подмены функции с произвольным количеством параметров - не лучшее решение
![]() |
|||
|
||||
d06osipov |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 1.11.2006 Репутация: нет Всего: нет |
Запятая при вызове функции это не переопределение, а синтаксическая конструкция. На тех компиляторах, на которых я пробовал, это воспринималось как разделение аргументов. Не знаю, оговорено ли это явно в Стандарте, или нет, но в любом случае, лучше при использовании запятых заключить аргумент в скобки (как в примере). Это сообщение отредактировал(а) d06osipov - 10.6.2008, 16:53 |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
ммм, всем спасибо за ответы. Спор помоему пошел ни о чем.
Подведу итог: использование запятой ухудшает читабельность кода, но в некоторых случаех запятая удобна(перегруженная) как в случае с boost. Всем спасибо за ответы. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |