Форум программистов, компьютерный форум CyberForum.ru

Функция возвращает auto - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Yami
 Аватар для Yami
3 / 1 / 0
Регистрация: 02.11.2013
Сообщений: 21
02.11.2013, 16:50     Функция возвращает auto #1
В настройках ставлю галочку Have g++ follow the C++11 ISO C++ language standard [-std=c++11]

Но все равно не компилится.

C++
1
2
3
4
5
template<typename T1,  typename T2>
auto Max(const T1 &a,  const T2 &b)
{
    return (a>b) ? a : b;
}
Ошибку показывает error: 'Max' function uses 'auto' type specifier without trailing return type|

Добавлено через 3 минуты
Как заставить ее скомпилироваться?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2013, 16:50     Функция возвращает auto
Посмотрите здесь:

Функция не возвращает результат=( C++
C++ Функция возвращает объект
C++ Функция get() не возвращает значение
C++ Функция возвращает структуру
Функция не возвращает false C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
02.11.2013, 16:52
  #2

Не по теме:

Эм... А как вообще компилятор должен на этапе компиляции понять значение какого типа вернет функция?

Belfegor
Ghost
 Аватар для Belfegor
172 / 172 / 6
Регистрация: 16.09.2012
Сообщений: 524
02.11.2013, 16:55     Функция возвращает auto #3
C++
1
2
3
4
5
template<typename T1,  typename T2>
auto Max(const T1 &a,  const T2 &b)->decltype(&a)
{
    return (a>b) ? a : b;
}
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
02.11.2013, 16:55     Функция возвращает auto #4
Смысла в это коде нет. Правильный вариант должен выглядеть как-то так:
C++
1
2
3
4
5
template<typename T>
T Max( const T & a,  const T & b )
{
    return (a>b) ? a : b;
}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.11.2013, 16:56     Функция возвращает auto #5
Цитата Сообщение от Yami Посмотреть сообщение
Как заставить ее скомпилироваться?
Никак. Тип возврата не должен зависеть от логики внутри функции.

Добавлено через 27 секунд
Belfegor, типы разные же

Добавлено через 30 секунд
castaway, преобразуем T в bool?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
02.11.2013, 16:56     Функция возвращает auto #6
castaway, ну только возвращаемое значение все-таки не bool.
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
02.11.2013, 16:57     Функция возвращает auto #7
0x10, да, я уже поправил.
Yami
 Аватар для Yami
3 / 1 / 0
Регистрация: 02.11.2013
Сообщений: 21
02.11.2013, 17:03  [ТС]     Функция возвращает auto #8
Цитата Сообщение от Belfegor Посмотреть сообщение
C++
1
2
3
4
5
template<typename T1,  typename T2>
auto Max(const T1 &a,  const T2 &b)->decltype(&a)
{
    return (a>b) ? a : b;
}
А что такое ->decltype(&a) ?

Добавлено через 3 минуты
Цитата Сообщение от castaway Посмотреть сообщение
Смысла в это коде нет. Правильный вариант должен выглядеть как-то так:
C++
1
2
3
4
5
template<typename T>
T Max( const T & a,  const T & b )
{
    return (a>b) ? a : b;
}
А если аргументы у функции разных типов? Так не получится
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
02.11.2013, 17:04     Функция возвращает auto #9
Цитата Сообщение от Yami Посмотреть сообщение
А если аргументы у функции разных типов?
А как ты разные типы сравнивать собрался? Например int и string ?
Я думаю в правильно написанных программах такого не должно быть.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.11.2013, 17:05     Функция возвращает auto #10
Цитата Сообщение от Yami Посмотреть сообщение
А что такое ->decltype(&a) ?
Это говорит, что возвращаемый тип будет такой же как у аргумента. Хотя в данном случае должно быть без &. И типы должны быть одинаковые.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.11.2013, 17:07     Функция возвращает auto #11
std::common_type
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
02.11.2013, 17:08     Функция возвращает auto #12
Ну или уж тогда так:
C++
1
2
3
4
5
template <typename T0, typename T1, typename T2>
T0 Max( T1 a, T2 b )
{
    return (a > b) ? a : b;
}
Yami
 Аватар для Yami
3 / 1 / 0
Регистрация: 02.11.2013
Сообщений: 21
02.11.2013, 17:10  [ТС]     Функция возвращает auto #13
Цитата Сообщение от castaway Посмотреть сообщение
А как ты разные типы сравнивать собрался? Например int и string ?
Можно сравнить int с double и вернуть максимальное

Цитата Сообщение от Tulosba Посмотреть сообщение
Это говорит, что возвращаемый тип будет такой же как у аргумента. Хотя в данном случае должно быть без &. И типы должны быть одинаковые.
Понятно
Tulosba
02.11.2013, 17:10
  #14

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
std::common_type
О сколько нам открытий чудных
Готовит .... стандарт C++11 (и даже C++14)

Yami
 Аватар для Yami
3 / 1 / 0
Регистрация: 02.11.2013
Сообщений: 21
02.11.2013, 17:18  [ТС]     Функция возвращает auto #15
Цитата Сообщение от Jupiter Посмотреть сообщение
У меня проблемы с английским

Добавлено через 2 минуты
В принципе программа компилится. Правда не так работает как надо
[CPPtemplate<typename T1, typename T2>
auto Max(const T1 &a, const T2 &b) -> decltype(a)
{
return (a>b) ? a : b;
}][/CPP]





Цитата Сообщение от castaway Посмотреть сообщение
Ну или уж тогда так:
C++
1
2
3
4
5
template <typename T0, typename T1, typename T2>
T0 Max( T1 a, T2 b )
{
    return (a > b) ? a : b;
}
Дополнительный аргумент в функции. Подумаю на этим
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
02.11.2013, 17:19     Функция возвращает auto #16
Цитата Сообщение от Yami Посмотреть сообщение
Дополнительный аргумент в функции.
Ну.. не аргумент, а параметр шаблона. Аргументов по прежнему 2.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
02.11.2013, 17:19     Функция возвращает auto #17
Цитата Сообщение от Yami Посмотреть сообщение
Дополнительный аргумент в функции. Подумаю на этим
Лучше все-таки подумать над сравнением объектов одного типа.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
02.11.2013, 17:21     Функция возвращает auto #18
В gcc 4.8.x с флагом -std=c++1y все компилируется.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.11.2013, 17:26     Функция возвращает auto #19
Цитата Сообщение от diagon Посмотреть сообщение
В gcc 4.8.x с флагом -std=c++1y все компилируется.
С какими типами? А что если Max( 10, "42" )?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2013, 17:26     Функция возвращает auto
Еще ссылки по теме:

C++ Функция не возвращает значение
Функция не возвращает значение C++
Функция не возвращает значение C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Jupiter
02.11.2013, 17:26     Функция возвращает auto
  #20

Не по теме:

Цитата Сообщение от Yami Посмотреть сообщение
У меня проблемы с английским
если бы только с ним

Yandex
Объявления
02.11.2013, 17:26     Функция возвращает auto
Ответ Создать тему
Опции темы

Текущее время: 17:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru