Russian Qt Forum
Ноябрь 23, 2024, 08:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Новый стандарт С++  (Прочитано 9021 раз)
developer
Гость
« : Июнь 18, 2009, 17:26 »

Интересно услышать ваше мнение о нововведениях в С++, который хотят випустить.
Записан
spectre71
Гость
« Ответ #1 : Июнь 18, 2009, 17:39 »

Интересно услышать ваше мнение о нововведениях в С++, который хотят випустить.
Ты бы хоть ссылку дал или написал о каких нововведениях идет речь.
Записан
Rcus
Гость
« Ответ #2 : Июнь 18, 2009, 17:55 »

По мне так самое прекрасное это вывод типов (type inference), не самое просто дело в C++ с его перегрузками всего и вся /* функциональщики зевают, в глазах видно порицание: too slow */.
Сравните же
Код
C++ (Qt)
QHash<QString, FileInfo>::const_iterator it = hash.begin(), itend = hash.end();
//
auto it = hash.begin(), itend = hash.end();
 
Лямбда тоже интересна, синтаксис конечно многословный, но как-то приятнее чем boost::bind/lambda, теперь и земляне смогут использовать std::for_each.

Ну и конечно хорошо что стандартизовали некоторые части буста.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Июнь 18, 2009, 17:59 »

Ссылки:
Страничка Страуструпа: http://www.research.att.com/~bs/C++0xFAQ.html
C++0xCompilerSupport: http://wiki.apache.org/stdcxx/C++0xCompilerSupport
Записан

Юра.
mozgofil
Гость
« Ответ #4 : Июнь 24, 2009, 19:19 »

По мне так самое прекрасное это вывод типов (type inference), не самое просто дело в C++ с его перегрузками всего и вся /* функциональщики зевают, в глазах видно порицание: too slow */.
Сравните же
Код
C++ (Qt)
QHash<QString, FileInfo>::const_iterator it = hash.begin(), itend = hash.end();
//
auto it = hash.begin(), itend = hash.end();
 
какой уж :oс!!!
Записан
Rcus
Гость
« Ответ #5 : Июнь 24, 2009, 19:24 »

/** Нервно оглядывается в ожидании ужаса, что-то он задерживается */
Потрудитесь объяснить какая часть моего поста вызывает ужас?
Записан
SABROG
Гость
« Ответ #6 : Июнь 24, 2009, 19:51 »

Я правильно понимаю, в этом месте тип it определяется по возвращаемому значению?

Код
C++ (Qt)
auto it = hash.begin(), itend = hash.end();
 
Записан
Rcus
Гость
« Ответ #7 : Июнь 24, 2009, 19:59 »

Да. Но перегрузка и неявные преобразования очень плохо дружат с выводом типов (В языке OCaml нет ни того ни другого ради вывода типов).
Насколько я помню обсуждения драфта ради получения константных итераторов над неконстантным контейнером в стандартную библиотеку будут введены методы cbegin, cend, crbegin, crend.
Записан
SABROG
Гость
« Ответ #8 : Июнь 24, 2009, 20:49 »

Для явных преобразований есть explicit, поэтому не страшно. Помню когда только начал изучать C++ долго удивлялся нафига надо явно указывать тип, если он и так понятен из контекста. Правда думается мне, что будет ряд ограничений, которые сведут на нет эту возможность типа объявления переменной в структуре или классе, когда её размер невозможно узнать без явного использования где-нибудь.
Записан
mozgofil
Гость
« Ответ #9 : Июнь 24, 2009, 21:22 »

/** Нервно оглядывается в ожидании ужаса, что-то он задерживается */
Потрудитесь объяснить какая часть моего поста вызывает ужас?
листинг.
Что называется "лучшее - враг хорошего".
за счёт уменьшения времени кодирования получаем затруднение читабельности исходников:
во-первых: не видно состава контейнера
во-вторых: не видно что CONST_iterator
Записан
Rcus
Гость
« Ответ #10 : Июнь 24, 2009, 21:42 »

Ага, я тоже когда читал исходники на окамле ужасался! Улыбающийся А потом неделю не мог писать на плюсах, все искал iter, filter и map Улыбающийся /* укрывается от марсиан вооруженных std::for_each и std::transform*/
А если серьезно то, во-первых, знать нам нужно только то что это ассоциативный контейнер, что вполне можно выразить через имя переменной. Во-вторых, проблему const я уже описал, для std контейнеров добавление "c" явно будет означать константность (в Qt сейчас используется constBegin/constEnd, но после принятия стандарта думаю это исправят для обеспечения совместимости)
« Последнее редактирование: Июнь 24, 2009, 21:53 от Rcus » Записан
mozgofil
Гость
« Ответ #11 : Июнь 24, 2009, 22:51 »

Ага, я тоже когда читал исходники на окамле ужасался! Улыбающийся А потом неделю не мог писать на плюсах, все искал iter, filter и map Улыбающийся /* укрывается от марсиан вооруженных std::for_each и std::transform*/
А если серьезно то, во-первых, знать нам нужно только то что это ассоциативный контейнер, что вполне можно выразить через имя переменной.
Возвращение к венгерской конвенции(или как её)?
опять всякие "lpcszString"?

Во-вторых, проблему const я уже описал, для std контейнеров добавление "c" явно будет означать константность (в Qt сейчас используется constBegin/constEnd, но после принятия стандарта думаю это исправят для обеспечения совместимости)
А как же совместимость с прежними версиями stl , где не было 'c' ?
Записан
Rcus
Гость
« Ответ #12 : Июнь 25, 2009, 05:20 »

Ага, возврат к size_t, npos, cin, неожиданно да?

О какой совместимости вы говорите? Обратная совместимость есть: не хотите использовать - можете писать как привыкли.
Записан
mozgofil
Гость
« Ответ #13 : Июнь 25, 2009, 18:29 »

Ага, возврат к size_t, npos, cin, неожиданно да?
cin в этом списке лишний(как и size_t)  Подмигивающий

О какой совместимости вы говорите? Обратная совместимость есть: не хотите использовать - можете писать как привыкли.
Если часть кода проекта(в которой встречается 'c') нужно прицепить к старому проекту, использующему старую stl.
Записан
Rcus
Гость
« Ответ #14 : Июнь 25, 2009, 18:47 »

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

То есть вы хотите чтобы новведения в язык приходили без поддержки со стороны стандартной библиотеки? ... многие старые компиляторы не дружат с бустом, это же не повод не использовать его, так? Когда придет время использовать новый стандарт в серьезных проектах мало кому придет в голову взять старый компилятор
« Последнее редактирование: Июнь 25, 2009, 18:51 от Rcus » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.311 секунд. Запросов: 23.