Russian Qt Forum

Программирование => С/C++ => Тема начата: developer от Июнь 18, 2009, 17:26



Название: Новый стандарт С++
Отправлено: developer от Июнь 18, 2009, 17:26
Интересно услышать ваше мнение о нововведениях в С++, который хотят випустить.


Название: Re: Новый стандарт С++
Отправлено: spectre71 от Июнь 18, 2009, 17:39
Интересно услышать ваше мнение о нововведениях в С++, который хотят випустить.
Ты бы хоть ссылку дал или написал о каких нововведениях идет речь.


Название: Re: Новый стандарт С++
Отправлено: Rcus от Июнь 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.

Ну и конечно хорошо что стандартизовали некоторые части буста.


Название: Re: Новый стандарт С++
Отправлено: lit-uriy от Июнь 18, 2009, 17:59
Ссылки:
Страничка Страуструпа: http://www.research.att.com/~bs/C++0xFAQ.html
C++0xCompilerSupport: http://wiki.apache.org/stdcxx/C++0xCompilerSupport


Название: Re: Новый стандарт С++
Отправлено: mozgofil от Июнь 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с!!!


Название: Re: Новый стандарт С++
Отправлено: Rcus от Июнь 24, 2009, 19:24
/** Нервно оглядывается в ожидании ужаса, что-то он задерживается */
Потрудитесь объяснить какая часть моего поста вызывает ужас?


Название: Re: Новый стандарт С++
Отправлено: SABROG от Июнь 24, 2009, 19:51
Я правильно понимаю, в этом месте тип it определяется по возвращаемому значению?

Код
C++ (Qt)
auto it = hash.begin(), itend = hash.end();
 


Название: Re: Новый стандарт С++
Отправлено: Rcus от Июнь 24, 2009, 19:59
Да. Но перегрузка и неявные преобразования очень плохо дружат с выводом типов (В языке OCaml нет ни того ни другого ради вывода типов).
Насколько я помню обсуждения драфта ради получения константных итераторов над неконстантным контейнером в стандартную библиотеку будут введены методы cbegin, cend, crbegin, crend.


Название: Re: Новый стандарт С++
Отправлено: SABROG от Июнь 24, 2009, 20:49
Для явных преобразований есть explicit, поэтому не страшно. Помню когда только начал изучать C++ долго удивлялся нафига надо явно указывать тип, если он и так понятен из контекста. Правда думается мне, что будет ряд ограничений, которые сведут на нет эту возможность типа объявления переменной в структуре или классе, когда её размер невозможно узнать без явного использования где-нибудь.


Название: Re: Новый стандарт С++
Отправлено: mozgofil от Июнь 24, 2009, 21:22
/** Нервно оглядывается в ожидании ужаса, что-то он задерживается */
Потрудитесь объяснить какая часть моего поста вызывает ужас?
листинг.
Что называется "лучшее - враг хорошего".
за счёт уменьшения времени кодирования получаем затруднение читабельности исходников:
во-первых: не видно состава контейнера
во-вторых: не видно что CONST_iterator


Название: Re: Новый стандарт С++
Отправлено: Rcus от Июнь 24, 2009, 21:42
Ага, я тоже когда читал исходники на окамле ужасался! :) А потом неделю не мог писать на плюсах, все искал iter, filter и map :) /* укрывается от марсиан вооруженных std::for_each и std::transform*/
А если серьезно то, во-первых, знать нам нужно только то что это ассоциативный контейнер, что вполне можно выразить через имя переменной. Во-вторых, проблему const я уже описал, для std контейнеров добавление "c" явно будет означать константность (в Qt сейчас используется constBegin/constEnd, но после принятия стандарта думаю это исправят для обеспечения совместимости)


Название: Re: Новый стандарт С++
Отправлено: mozgofil от Июнь 24, 2009, 22:51
Ага, я тоже когда читал исходники на окамле ужасался! :) А потом неделю не мог писать на плюсах, все искал iter, filter и map :) /* укрывается от марсиан вооруженных std::for_each и std::transform*/
А если серьезно то, во-первых, знать нам нужно только то что это ассоциативный контейнер, что вполне можно выразить через имя переменной.
Возвращение к венгерской конвенции(или как её)?
опять всякие "lpcszString"?

Во-вторых, проблему const я уже описал, для std контейнеров добавление "c" явно будет означать константность (в Qt сейчас используется constBegin/constEnd, но после принятия стандарта думаю это исправят для обеспечения совместимости)
А как же совместимость с прежними версиями stl , где не было 'c' ?


Название: Re: Новый стандарт С++
Отправлено: Rcus от Июнь 25, 2009, 05:20
Ага, возврат к size_t, npos, cin, неожиданно да?

О какой совместимости вы говорите? Обратная совместимость есть: не хотите использовать - можете писать как привыкли.


Название: Re: Новый стандарт С++
Отправлено: mozgofil от Июнь 25, 2009, 18:29
Ага, возврат к size_t, npos, cin, неожиданно да?
cin в этом списке лишний(как и size_t)  ;)

О какой совместимости вы говорите? Обратная совместимость есть: не хотите использовать - можете писать как привыкли.
Если часть кода проекта(в которой встречается 'c') нужно прицепить к старому проекту, использующему старую stl.


Название: Re: Новый стандарт С++
Отправлено: Rcus от Июнь 25, 2009, 18:47
Я имел ввиду что сила имен переменных достаточно велика и без использования венгерской нотации, впрочем, я не вижу проблемы с отсутствием дополнительного упоминания типа контейнера при использовании итераторов над ним.

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


Название: Re: Новый стандарт С++
Отправлено: mozgofil от Июнь 25, 2009, 19:44
Я имел ввиду что сила имен переменных достаточно велика и без использования венгерской нотации, впрочем, я не вижу проблемы с отсутствием дополнительного упоминания типа контейнера при использовании итераторов над ним.
является ли "проблемой" уродливые имена переменных? - для кого как. Вообще, венгерскую нотацию придумали для тех, кто не умеет придумывать адекватные названия переменных, ибо небольшая неточность в названии - всё равно что большая.

То есть вы хотите чтобы новведения в язык приходили без поддержки со стороны стандартной библиотеки? ... многие старые компиляторы не дружат с бустом, это же не повод не использовать его, так? Когда придет время использовать новый стандарт в серьезных проектах мало кому придет в голову взять старый компилятор
многие старые проекты практически нереально перевести на новый компилятор(среду разработки).