
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.21] |
![]() |
|
Страницы: (78) « Первая ... 29 30 [31] 32 33 ... 77 78 ( Перейти к последнему сообщению ) |
Сообщ.
#451
,
|
|
|
D_KEY, тебе знакомо понятие DSL?
Если например в моем DSL || обозначает параллельные прямые - о какой последовательности речь?? |
Сообщ.
#452
,
|
|
|
Цитата GoldFinch @ D_KEY, тебе знакомо понятие DSL? Если например в моем DSL || обозначает параллельные прямые - о какой последовательности речь?? Знакомо. Только в С++ нереально сделать нормальный DSL. "Внешний" DSL, в любом случае, лучше. |
Сообщ.
#453
,
|
|
|
Цитата D_KEY @ И ничего страшного в … Я не вижу. А код гораздо читабельнее(ибо семантика не меняется). Спорно. Как раз возможность использования разных сущностей в одном выражении очень удобна и читабельнее, чем написанная "в столбик", sqlite++ тому примером. Да и потоки тоже из той же серии, с ними тоже в строчку удобнее выводить, чем "cout.write("hello, "); cout.write(name);" ЗЫ а вообще, это всё оффтоп и его, наверное, надо вынести из данной темы. |
Сообщ.
#454
,
|
|
|
Цитата olias @ Цитата D_KEY @ И ничего страшного в … Я не вижу. А код гораздо читабельнее(ибо семантика не меняется). Спорно. Как раз возможность использования разных сущностей в одном выражении очень удобна и читабельнее, чем написанная "в столбик" Во-первых, я тебе привел вариант инициализации через массив. Во-вторых, ты все правильно говоришь для случаев, когда не меняется семантика и порядок вычислений(как в этом случае). Цитата Здесь с порядком вычислений все в порядке. Он соответствует неперегруженному варианту. sqlite++ тому примером. Да и потоки тоже из той же серии, с ними тоже в строчку удобнее выводить, чем "cout.write("hello, "); cout.write(name);" |
![]() |
Сообщ.
#455
,
|
|
D_KEY, верно, что перегруженные operator||(), operator&&() и operator,() имеют иную семантику. Потому их и не рекомендуется перегружать. Но это не достаточно сильное обоснование для полного запрета. Тот же ?: запрещён к перегрузке по иным соображиям.
|
Сообщ.
#456
,
|
|
|
Цитата Qraizer @ Но это не достаточно сильное обоснование для полного запрета. Да я и не говорю, что следует запретить. Раз есть - пусть будет. Просто непонятно, для чего нужно было такую перегрузку разрешать изначально. Цитата По каким? Тот же ?: запрещён к перегрузке по иным соображиям. |
Сообщ.
#457
,
|
|
|
D_KEY
http://www.research.att.com/~bs/bs_faq2.html#overload-dot Цитата There is no fundamental reason to disallow overloading of ?:. I just didn't see the need to introduce the special case of overloading a ternary operator. Note that a function overloading expr1?expr2:expr3 would not be able to guarantee that only one of expr2 and expr3 was executed. Добавлено и да, действительно сложно представить зачем перегружать ?: |
Сообщ.
#458
,
|
|
|
Цитата GoldFinch @ и да, действительно сложно представить зачем перегружать ?: То есть единственной причиной по которой нельзя перегружать ?: является отсутствие смысла? Мда... А до того, что порядок вычислений меняется, никому дела нет? Не знаю. На мой взгляд, перегрузка операторов, которые не могут быть представлены, как вызов функции, противоречит как смыслу перегрузки, так и реализации этого механизма... Ладно, действительно, не в тему спор. |
![]() |
Сообщ.
#459
,
|
|
GoldFinch, в том-то и дело, что к трём остальным операторам это относится в той же мере. Все эти (неперегруженные) операторы вносят точку следования наравне с ;, чего не делают перегруженные, что и есть иной семантический смысл.
Не знаю точно. Могу догадываться, что возникают сложности с его интерпретацией в роли метода класса. Где там this-у место? |
Сообщ.
#460
,
|
|
|
Тут скорее причина в другом, оператор ?: стоит несколько особняком от остальных операторов. Это скорее даже не оператор, а особая синтаксическая конструкция, вроде сокращенной записи для if…else.
В том же Algol W в этом качестве можно использовать if…fi. Там в этом смысле вообще хорошо, любая конструкция является выражением, возвращающим значение. |
Сообщ.
#461
,
|
|
|
Цитата amk @ Тут скорее причина в другом, оператор ?: стоит несколько особняком от остальных операторов. Также, как и ||, && и, тем более, запятая. Цитата Ну не совсем. Это именно выражение, в отличие от. Это скорее даже не оператор, а особая синтаксическая конструкция, вроде сокращенной записи для if…else. |
Сообщ.
#462
,
|
|
|
Просто для ||, && и , нет такого устойчивого стереотипа, что они означают (по крайней мере у разработчиков стандартов такой стереотип видимо есть). Плюс можно их перегрузить чтобы они были более-менее понятны.
Хотя на мой взгляд лучше для первых двух операторов просто задать преобразователь в bool (вроде стандартный ), а для запятой, во избежание ненужных сюрпризов, пользоваться встроенным оператором. |
Сообщ.
#463
,
|
|
|
Цитата amk @ Просто для ||, && и , нет такого устойчивого стереотипа, что они означают Дело не только в значении, дело в поведении и порядке вычислений. Так, например, встроенный || не вычисляет второй аргумент, если первый - true, кроме того, первый аргумент всегда вычисляется до второго. А если мы перегружаем ||, то вычислены будут оба аргумента, причем в неизвестном порядке. |
Сообщ.
#464
,
|
|
|
Да, это проблема. Если бы можно было отложить вычисление параметров до того момента, когда они действительно понадобятся. Но в C++ такой возможности нет - это не Алгол.
|
Сообщ.
#465
,
|
|
|
Цитата amk @ Если бы можно было отложить вычисление параметров до того момента, когда они действительно понадобятся. ленивые вычисления вполне реализуемы, правда вместо foo(x) будет чтото вроде bind(foo,x) |