|
Alvin Seville
|
||||||
Что означает в C++ запись вида auto f() -> T?28.12.2018, 10:00. Показов 2897. Ответов 14
Метки нет (Все метки)
0
|
||||||
| 28.12.2018, 10:00 | |
|
Ответы с готовыми решениями:
14
не понимаю запись вида http://что-то/index.php?что-то=&where=что-то Что означает запись в скобках и что возвращает return |
|
156 / 114 / 36
Регистрация: 27.06.2018
Сообщений: 257
|
|
| 28.12.2018, 10:36 | |
auto говорит компилятору, чтобы он сам искал подходящий тип для переменной.Но в случае использования auto для функции, тип должен быть определён программистом, поэтому явно указывается возвращаемый тип
0
|
|
|
Alvin Seville
|
|
| 28.12.2018, 10:50 [ТС] | |
|
Human_foot, а какой смысл тогда auto тут, если тип все равно указывать?
0
|
|
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||||
| 28.12.2018, 11:07 | ||||||
|
Соколиный глаз, перед списком аргументов их тип еще неизвестен компилятору. А если тип возврата нужно из него выводить тогда это и используется. К примеру:
1
|
||||||
|
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
|
|
| 28.12.2018, 11:31 | |
|
Стоит отметить что в С++14
trailing return type не являеться об`язательным, а возвращаемый тип может быть определен из тела функции.
0
|
|
|
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
|
||||||||||||
| 28.12.2018, 11:48 | ||||||||||||
|
Программист может явно указать тип возвращаемого значения. А может и не указывать. На самом деле запись вида:
И ничего более.
0
|
||||||||||||
|
156 / 114 / 36
Регистрация: 27.06.2018
Сообщений: 257
|
|
| 28.12.2018, 12:04 | |
|
0
|
|
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 28.12.2018, 12:05 | ||
|
0
|
||
|
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
|
||
| 28.12.2018, 12:26 | ||
|
Нет ни одной версии стандарта, в которой бы программист был обязан для функций использовать запись вида: auto foo() -> T
0
|
||
| 28.12.2018, 12:30 | |
|
Не по теме: Пример кода можно?
0
|
|
|
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
|
||||||||||||||||||||||||||||||||
| 28.12.2018, 13:10 | ||||||||||||||||||||||||||||||||
|
Явное указание T нужно лишь там, где оно необходимо. А необходимо оно может быть только в трёх случаях: 1. Когда наружу нужно вернуть тип данных, не соответствующий результату работы Пример:
auto вычисляет типы согласно своим правилам, отличным от правил буквальной подстановки decltype.auto подчиняется правилам "схлопывания" типов по аналогии c forward reference(подробности гугли: хабр универсальные ссылки) (подробности гугли: хабр идеальная передача аргументов) В результате, на выходе может получится не тот тип данных, на который мы рассчитывали. Поэтому, иногда мы вынужденны дополнительно явно указывать, что именно мы хотим. Пример: На языке с++ литерная текстовая константа имеет тип "массив". Допустим, хотим вернуть из функции ссылку на статический массив.
auto результат будет const char*.Не то, что мы ожидали... Давайте скажем компилятору, что возвращая ссылку на массив, мы хотим получать именно ссылку, а не указатель. Эта мера не позволит компилятору выполнить неявное приведение типов:
другой способ добиться того же самого:
3. Моё любимое. Автовывод типов значений имеет под собой "шаблонную" природу. Он подчиняется тем же правилам, которым подчиняются обычные классические шаблоны с++ А значит, можно задействовать различные трюки. Например SFINAE: Задача: написать универсальную функцию begin, которая сможет работать не только с контейнерами, или с массивами, но и с сишными строчками, и с итераторами:
тип возвращаемого значения должен быть точно таким же, какой вернёт вызов std::begin(s) Если же окажется, что аргумент s не совместим с std::begin, тогда весь шаблон зафейлится, и данная перегрузка вообще не будет использована. В этом случае компилятор рассмотрит вторую перегрузку. Для неё тип возвращаемого значения - это "разыменовать p, и взять адрес" Такое можно провернуть только с указателями, или с итераторами. В результате получаем: для всех типов совместимых с std::begin отработает первый вариант. для указательных типов сработает второй вариант. Oби перегрузки не конфликтуют друг с другом, потому что благодаря указанному типу возвращаемого значения, срабатывает SFINAE, которое оставляет в живых только одну заведомо подходящую версию
1
|
||||||||||||||||||||||||||||||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||||||
| 28.12.2018, 13:25 | |||||||
0
|
|||||||
|
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
|
||
| 28.12.2018, 16:45 | ||
|
2) Задача написать только функцию begin? А end как будет выглядеть?
0
|
||
| 28.12.2018, 18:27 | |
|
Не по теме: Эхххх, Дениска...
0
|
|
|
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
|
|||||||||||||
| 29.12.2018, 12:36 | |||||||||||||
|
https://rextester.com/HZM35068
https://rextester.com/HZM35068 Учитывается множество нюансов. Итератор как минимум должен уметь определять факт своей инвалидности:
Если вам так интересно, можно завести отдельную тему)))
0
|
|||||||||||||
| 29.12.2018, 12:36 | |
|
Помогаю со студенческими работами здесь
15
Что означает запись?
Что означает запись .5?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|