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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Yami
3 / 1 / 0
Регистрация: 02.11.2013
Сообщений: 21
#1

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

02.11.2013, 16:50. Просмотров 1408. Ответов 22
Метки нет (Все метки)

В настройках ставлю галочку 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
Посмотрите здесь:

Ошибка: функция возвращает auto - C++
Поставил галочку на Have g++ follow the C++11 ISO C++ language standard . Но почему то не компилируется. auto compute() { ...

Функция не возвращает значение - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int ca(int a) { int i,r; r = 0; ...

Функция возвращает объект - C++
Доброго времени суток! Как сделать, чтобы функция возвращала объект, ну или указатель на объект. Использую так: Image-&gt;Picture...

Функция возвращает массив - C++
Как сделать чтобы функция возвращала массив(не исползуя указатели):(. К присмеру: ... char v; // //заполнение массива // ...

Функция возвращает структуру - C++
Всем привет. Есть код взят из книжки &quot;С++ 2008 для начинающих&quot;, ошибок при проверке не выдает , но при отдалке пишет: нет прав на чтение....

Функция не возвращает значение - C++
Функция ничего не возвращает: int Return(int s) { return s; } Передаю в аргумент S целочисленную переменную, но результата в...

Функция не возвращает значение - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; #include &quot;stdafx.h&quot; using namespace std; const int max_size = 100; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
02.11.2013, 16:52
  #2

Не по теме:

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

Belfegor
Ghost
172 / 172 / 6
Регистрация: 16.09.2012
Сообщений: 526
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
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 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
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.11.2013, 16:56     Функция возвращает auto #5
Цитата Сообщение от Yami Посмотреть сообщение
Как заставить ее скомпилироваться?
Никак. Тип возврата не должен зависеть от логики внутри функции.

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

Добавлено через 30 секунд
castaway, преобразуем T в bool?
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,011
02.11.2013, 16:56     Функция возвращает auto #6
castaway, ну только возвращаемое значение все-таки не bool.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
02.11.2013, 16:57     Функция возвращает auto #7
0x10, да, я уже поправил.
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
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
02.11.2013, 17:04     Функция возвращает auto #9
Цитата Сообщение от Yami Посмотреть сообщение
А если аргументы у функции разных типов?
А как ты разные типы сравнивать собрался? Например int и string ?
Я думаю в правильно написанных программах такого не должно быть.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.11.2013, 17:05     Функция возвращает auto #10
Цитата Сообщение от Yami Посмотреть сообщение
А что такое ->decltype(&a) ?
Это говорит, что возвращаемый тип будет такой же как у аргумента. Хотя в данном случае должно быть без &. И типы должны быть одинаковые.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.11.2013, 17:07     Функция возвращает auto #11
std::common_type
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 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
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
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
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
02.11.2013, 17:19     Функция возвращает auto #16
Цитата Сообщение от Yami Посмотреть сообщение
Дополнительный аргумент в функции.
Ну.. не аргумент, а параметр шаблона. Аргументов по прежнему 2.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,011
02.11.2013, 17:19     Функция возвращает auto #17
Цитата Сообщение от Yami Посмотреть сообщение
Дополнительный аргумент в функции. Подумаю на этим
Лучше все-таки подумать над сравнением объектов одного типа.
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
02.11.2013, 17:21     Функция возвращает auto #18
В gcc 4.8.x с флагом -std=c++1y все компилируется.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
Еще ссылки по теме:

Функция не возвращает false - C++
Вообщем str это строка, которая может содержать в себе знак математической операции, скобки, число (например 1, 5, 556, 33 ..) и т.д. ...

Функция get() не возвращает значение - C++
Есть класс, в котором определен объект типа SDL_Surface*. Пытаюсь передать его в сторонний класс с помощью метода getScreen(), но он по...

Функция не возвращает результат=( - C++
Добрый вечер. у меня такая проблема. мне нужно перегрузить функцию для моего класса: numb numb::operator +(const numb &amp;p)const { ...

Узнать, что возвращает функция - C++
Функция возвращает указатель на неизвестную структуру но как определить что содержится в структуре? это нашел в интернете ...

Узнать что возвращает функция - C++
Вопрос уже задавал раньше, но никто не смог ответить :) В общем есть функция которая возвращает указатель на неизвестно что :) ....


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

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

Не по теме:

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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru