
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.21] |
![]() |
|
Страницы: (78) « Первая ... 28 29 [30] 31 32 ... 77 78 ( Перейти к последнему сообщению ) |
Сообщ.
#436
,
|
|
|
Ну все-таки это вещи очень разные. |
Сообщ.
#437
,
|
|
|
Цитата miksayer @ это чтобы можно было перегружать оператор = для такого случая: ![]() ![]() SomeClass a = {1, 2, 3} ? Тут нет присваивания. |
Сообщ.
#438
,
|
|
|
Цитата Masterkent @ Тут нет присваивания. в каком смысле? а что тогда? Добавлено а каким примерно образом эмулировали? а то я не очень себе представляю, как это возможно |
Сообщ.
#439
,
|
|
|
Цитата miksayer @ в каком смысле? а что тогда? Вызов конструктора. |
Сообщ.
#440
,
|
|
|
miksayer
тут примеры. Не один-в-один, конечно, но похоже да и всяко удобнее, чем через промежуточный Си-массив. |
Сообщ.
#441
,
|
|
|
Цитата olias @ miksayer тут примеры. Не один-в-один, конечно, но похоже да и всяко удобнее, чем через промежуточный Си-массив. А зачем это вообще нужно? Что неужели сложно сделать push_back или insert? Вот std::initializer_list другое дело. Инициализация при конструировании действительно полезна. |
Сообщ.
#442
,
|
|
|
D_KEY
То есть, вместо "vector<int> v; v += 1,2,3,7,8,9;" предлагаешь писать ![]() ![]() vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(7); v.push_back(8); v.push_back(9); ? Цитата D_KEY @ Вот std::initializer_list другое дело. Понятно, что другое, но для него нужна поддержка компилятором, а она есть пока только в гцц. |
Сообщ.
#443
,
|
|
|
Цитата D_KEY @ А зачем это вообще нужно? Что неужели сложно сделать push_back или insert? Для инициализации статических или глобальных контейнеров - очень даже удобно. |
Сообщ.
#444
,
|
|
|
Цитата olias @ D_KEY То есть, вместо "vector<int> v; v += 1,2,3,7,8,9;" предлагаешь писать ![]() ![]() vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(7); v.push_back(8); v.push_back(9); ? Во-первых, совершенно не вижу смысла писать все в одну строку. Во-вторых, а что тебе не нравится? В-третьих, можно и так: ![]() ![]() int t[] = {1,2,3,7,8,9}; vector<int> v(t, t + sizeof(t)); Не вижу достаточных оснований менять семантику оператора. И вообще, я не понимаю, для чего было разрешать перегрузку operator,(равно как и && и ||). |
Сообщ.
#445
,
|
|
|
Цитата D_KEY @ я не понимаю, для чего было разрешать перегрузку operator, для списков, и для DSL например если надо задать список T, то можно использовать T[] но если надо задать список разных типов - то очевидно лучший вариант - перегрузка , my_array a; a+=1,"2",complex(3,4); насчет DSL - посмотри на boost.spirit, как там используется перегрузка , && || |
Сообщ.
#446
,
|
|
|
Цитата GoldFinch @ но если надо задать список разных типов - то очевидно лучший вариант - перегрузка , my_array a; a+=1,"2",complex(3,4); А для меня очевидно, что это не стоит изменения семантики. , - это такой же "оператор", как ;. Может и это следует разрешить перегружать? Есть tuple в бусте и в новом стандарте. И ничего страшного в: ![]() ![]() my_array a; a += 1; a += "2"; a += complex(3,4); Я не вижу. А код гораздо читабельнее(ибо семантика не меняется). |
Сообщ.
#447
,
|
|
|
D_KEY, ты не видишь - другие видят; не знаешь зачем - другие знают.
; - в терминологии С++ это не оператор, читай стандарт в С++ вообще много что надо изменить и добавить |
Сообщ.
#448
,
|
|
|
Цитата GoldFinch @ D_KEY, ты не видишь - другие видят; не знаешь зачем - другие знают. Естественно. Цитата ; - в терминологии С++ это не оператор, читай стандарт Я в курсе ![]() Мне не ясно почему , можно перегружать. Цитата в С++ вообще много что надо изменить и добавить ![]() |
Сообщ.
#449
,
|
|
|
D_KEY, не хочешь перегружать , - не перегружай, но другим-то зачем не давать?
поиск "operator(\s*),(\s*)\(" в boost/ показывает что перегрузка , используется в assign, python, proto, spirit, test |
Сообщ.
#450
,
|
|
|
Цитата GoldFinch @ D_KEY, не хочешь перегружать , - не перегружай, но другим-то зачем не давать? Так я говорю, давай перегрузим ; или ?: Понимаешь, есть "необычные" "операторы", поведение которых строго определено и отличается от семантики вызова функции. То есть вводя перегрузку таких операторов ты меняешь их суть. В результате понять, что и в какой последовательности делает код не всегда представляется возможным. К таким "операторам" относятся, например, запятая, ||, &&, ?:. Из них запрещен только ?:. |