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

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

Войти
Регистрация
Восстановить пароль
 
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
#1

decltype с тернарным оператором - C++

16.09.2013, 13:48. Просмотров 413. Ответов 6
Метки нет (Все метки)

Почему в данном коде функция foo всегда работает нормально, а max работает только с int-ами?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
 
template<typename T>
auto foo(T&& t) -> decltype(t)
{
   return t;
}
 
template<typename T, typename U>
auto max(T&& t, U&& u) -> decltype(t > u ? t : u)
{
   return t > u ? t : u;
}
 
int main()
{
   int x = 10;
   int y = 20;
   double z = 30.5;
 
   foo(x) = 100.2; //Ok
   foo(z) = 100.2; //Ok
 
   max(x, y) = 110.2; //Ok
   //max(x, z) = 110.2; //Error
   //max(x, 5.2) = 110.2; //Error
   max(x, 2) = 110.2; //Ok
 
   std::cout << "x = " << x << std::endl;
   std::cout << "y = " << y << std::endl;
   std::cout << "z = " << z << std::endl;
 
   return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2013, 13:48     decltype с тернарным оператором
Посмотрите здесь:

Stack overflow с тернарным оператором - C++
Так работает: unsigned long Ly(const string &amp;s) { ... } unsigned long Rs(const string &amp;s) { ... } unsigned long(*F)(const string...

Константы, decltype - C++
Суть в том, что, если тип не есть класс, то при определении типа cv-квалификаторы отбрасываются. А сам объект остаётся...

Decltype и typeof - C++
Товарищи. Возникла проблема с пониманием std++11. Насколько я понимаю typeof более не поддерживается. Сегодня познакомился с...

Странная ошибка с decltype [GCC 4.9.2] - C++
Всем привет, есть следующий метод : class AddressV4 { public: static std::set&lt;AddressV4&gt; getByName(const std::string...

Определения типа через decltype - C++
Добрый день, int main() { int a = {1, 2, 3}; decltype(auto) c = (a); } Объясните:

В чем отличие decltype и auto - C++
в чем отличие типа decltype и типа auto?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
16.09.2013, 14:26     decltype с тернарным оператором #2
DiffEreD, Тернарный оператор возвращает значение, а не копию, если может это сделать, однако если типы разные - понадобиться преобразование и возвращена будет копия значения, к которой соответственно ничего нельзя присвоить.
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
16.09.2013, 14:33  [ТС]     decltype с тернарным оператором #3
Типа так:
C++
1
2
3
4
5
template<typename T, typename U>
typename std::common_type<T, U>::type max(T&& t, U&& u)
{
   return t > u ? t : u;
}
Это не работает.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
16.09.2013, 14:35     decltype с тернарным оператором #4
DiffEreD, Я собственно был не прав и тут же поправился. common_type тут ни при чем.
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
16.09.2013, 14:38  [ТС]     decltype с тернарным оператором #5
Я еще такой вариант пробовал, но тоже, безрезультатно:
C++
1
decltype(t > u ? std::forward<T>(t) : std::forward<U>(u))
Похоже decltype в этом случае не применимо.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
16.09.2013, 14:52     decltype с тернарным оператором #6
DiffEreD, Просто идет возврат не ссылки, типы же разные, следовательно одно значение должно быть приведено к другому.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2013, 15:03     decltype с тернарным оператором
Еще ссылки по теме:

Отличия спецификаторов decltype и auto - C++
Спецификатор auto : - выводит тип переменной из инициализатора; - может задействовать только один тип или чтобы они были совместимыми;...

Code::Blocks ругается на auto и decltype - C++
Написал небольшую программку, на среде Eclipse Mars все работает очень даже отлично, а вот на Code::Blocks выдает следующее : &quot;error:...

Стивен Прата - про decltype (гл. 8, стр. 422) - C++
Прочитал раз десять. Сверился с оригиналом: Я что-то упустил или тип функции long? Соответственно, и m должна быть long? С какого...

Объясните пример с decltype, инициализацией контейнера map, по работе for_each и copy - C++
template&lt;class T, class U&gt; auto hellSum(const T&amp; x, const U&amp; y) -&gt; decltype(x + y) { return x + y; } Вот...


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

Или воспользуйтесь поиском по форуму:
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
16.09.2013, 15:03  [ТС]     decltype с тернарным оператором #7
Понял.
Yandex
Объявления
16.09.2013, 15:03     decltype с тернарным оператором
Ответ Создать тему
Опции темы

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