
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.21] |
![]() |
|
Страницы: (78) « Первая ... 12 13 [14] 15 16 ... 77 78 ( Перейти к последнему сообщению ) |
![]() |
Сообщ.
#196
,
|
|
Скорее для тех, кто ленится прочитать уже не один раз написанное(в этой теме). Ок. Было: ![]() ![]() SomeNamespace::WithInnerNamespace::SomeVeryLongTypeName *obj = new SomeNamespace::WithInnerNamespace::SomeVeryLongTypeName(); Стало: ![]() ![]() auto *obj = new SomeNamespace::WithInnerNamespace::SomeVeryLongTypeName(); Это, на самом деле, самый примитивный случай. Более интересные ситуации не решаемы копипастом. |
Сообщ.
#197
,
|
|
|
В-общем, auto позволит в некоторых случаях сократить количество набиваемых символов, вместо
![]() ![]() & for (std::vector<SomeType>::iterator i = myvector.begin(); i != myvector.end(); ++i) { ... } ![]() ![]() for (auto i = myvector.begin(); i != myvector.end(); ++i) { ... } Вдобавок, позволит повысить гибкость шаблонов. Не обязательно будет так длинно описывать каждый возвращаемый тип (Точнее можно будет использовать не так строго определенные классы) ИМХО, очень полезное изменение. |
![]() |
Сообщ.
#198
,
|
|
Вот один из очень таких интересных случаев:
![]() ![]() #include <complex> template <typename L, typename R> std::complex<decltype(L()+R())> operator+(const std::complex<L>& l, const std::complex<R>& r) { auto re = l.real()+r.real(); auto im = l.imag()+r.imag(); return std::complex<decltype(re)>(re, im); } |
Сообщ.
#199
,
|
|
|
А пересылку в шаблонах можно будет делать?
Если упрощенно, то что-нибудь такое: ![]() ![]() template< typename T > class A { public: auto f() { return a.g(); } private: T a; }; // class A А то сейчас подобного поведения добиться вообще никак нельзя(или я пока слабоват в метапрограмминге). |
Сообщ.
#200
,
|
|
|
Одно из предполагаемых предназначений auto - определение типа результата функции на основании типа аргумента return. Правда неясен вопрос с несколькими return в функции, из-за чего эта возможность может быть и не включена.
|
Сообщ.
#201
,
|
|
|
Цитата trainer @ Правда неясен вопрос с несколькими return в функции, из-за чего эта возможность может быть и не включена. Вполне может разруливаться путем ошибки компиляции. Т. е. компилятор потребует от программиста привести все return'ы к одному типу. |
Сообщ.
#202
,
|
|
|
Цитата Flex Ferrum @ Т. е. компилятор потребует от программиста привести все return'ы к одному типу. Возможно и менее строгое требование - существование общего типа, как у операндов тернарного оператора ![]() ![]() auto f(bool b) { if (b) return 1; else return 2.5; // поведение аналогично return b ? 1 : 2.5; } |
Сообщ.
#203
,
|
|
|
Правда чтобы воспользоваться таким определением нужно видеть тело функции, то есть практически только для определения inline-функций и шаблонных.
|
Сообщ.
#204
,
|
|
|
Цитата Dantes @ Цитата Flex Ferrum @ Т. е. компилятор потребует от программиста привести все return'ы к одному типу. Возможно и менее строгое требование - существование общего типа, как у операндов тернарного оператора ![]() ![]() auto f(bool b) { if (b) return 1; else return 2.5; // поведение аналогично return b ? 1 : 2.5; } Тип результата тернарного оператора определяется не "общем типом"(что это, кстати?), а типом последнего варианта... |
Сообщ.
#205
,
|
|
|
Цитата D_KEY @ Тип результата тернарного оператора определяется не "общем типом"(что это, кстати?), а типом последнего варианта... Тип его результата определяется правилами в пункте 5.16 стандарта. В стандарте нет термина common type, но такое словосочетание там присутствует, и что оно означает, по-моему, вполне очевидно. |
Сообщ.
#206
,
|
|
|
Да... Язык скатывается в яму маразма. Количества правил, крючков и их сочетаний увеличивается. Ясность чтения уменьшается.
|
Сообщ.
#207
,
|
|
|
Цитата slavik_xxx @ Да... Язык скатывается в яму маразма. Количества правил, крючков и их сочетаний увеличивается. Ясность чтения уменьшается. Фразы такого рода преследуют С++ с рождения ![]() На мой взгляд язык становится даже проще в использовании и логичнее, а возможности его возрастают. А если тебе не ясны какие-то "крючки" и "их сочетания" ты можешь их не использовать. "Что не использую, за то не плачу"... |
Сообщ.
#208
,
|
|
|
Цитата D_KEY @ "Что не использую, за то не плачу"... с позиции практики, а с позиции теории. Ведь студентам тогда придется учить еще больше |
Сообщ.
#209
,
|
|
|
Цитата Большой @ с позиции практики, а с позиции теории. Ведь студентам тогда придется учить еще больше Хм. Боюсь, типичный студент несколько, гм, слабоват для изучения "теории" С++. По этому "больше" ему учить не придется. |
Сообщ.
#210
,
|
|
|
Меня просто радует вот эта фича
![]() ![]() auto func(int x) -> double {return pow(x);} т.е если раньше стандартом запрещено было создавать две функции с одинаковыми сигнатурами ![]() ![]() int func(int x); double func(int x); так теперь все норма компилер сам будет соображать с auto(ну если компилер совсем будет слаб то ему подсунем, что тип возращаемого значения желательно double, наверное как и с inline он еще подумает делать его double или лучше int) Интересно в новом стандарте эти 2 функции будут с разными сигнатурами или нет? |