Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Указатели на неименованные перечисления, где-нибудь использует или для "красоты" 
V
    Опции темы
mes
Дата 4.3.2012, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  4.3.2012,  20:23 Найти цитируемый пост)
а этот код разве должен компилится?

должен (естественно f возвращает вектор, но не значение ), но увы не компилится.. будем ждать ))



--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 4.3.2012, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  4.3.2012,  21:24 Найти цитируемый пост)
которое определится позже

оно не позже определяется. это компилятор вместо auto вставляет decltype с несколько иной семантикой, именно для подобных случаев. ИМХО.
но я все равно завтра поспрашиваю на stackoverflow.

Добавлено @ 21:28
Цитата(mes @  4.3.2012,  21:27 Найти цитируемый пост)
естественно f возвращает вектор, но не значение

покажите, что конкретно Вы имеете ввиду?

Это сообщение отредактировал(а) boostcoder - 4.3.2012, 21:31
PM WWW   Вверх
mes
Дата 4.3.2012, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  4.3.2012,  20:25 Найти цитируемый пост)
зато с decltype все в порядке:

это совсем другое..  вот тут примените decltype :
Код


template <typename T>
struct A {};
template <typename T>
A<T> f(T  ) { return A<T> (); } 


int main() {
   A<auto> a =  f (5);
}


Это сообщение отредактировал(а) mes - 4.3.2012, 21:31


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 4.3.2012, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



а этот код точно корректный?
PM WWW   Вверх
mes
Дата 4.3.2012, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  4.3.2012,  20:27 Найти цитируемый пост)
 это компилятор вместо auto вставляет decltype

еще раз на примере функции : 
auto // нельзя выведать тип результата операции над аргументами,
    f (int i, int j)  //  пока не определены аргументы..
         -> decltype ( i+j)  // а теперь уже можно..
{
}



--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 4.3.2012, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



мне кажется, auto в данном случае просто синтаксический сахар. ибо никакой иной роли оно выполнять не может.
по тому, я и говорю, что auto - это decltype с несколько иной семантикой, именно для подобных случаев.

зы
может я не правильно вопросы задаю...


Это сообщение отредактировал(а) boostcoder - 4.3.2012, 21:37
PM WWW   Вверх
mes
Дата 4.3.2012, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  4.3.2012,  20:36 Найти цитируемый пост)
 это decltype с несколько иной семантикой,

Цитата

? Should auto be defined in terms of decltype (i.e., is auto var = expr equivalent to
decltype(expr) var = expr)? We suggest that the answer to that question be "no" because the semantics would be surprising, non-ideal for the purpose of initializing variables, and incompatible with current uses of typeof. Instead, we
propose that the semantics of auto follow exactly the rules of template argument deduction

http://www.open-std.org/jtc1/sc22/wg21/doc.../2003/n1478.pdf


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 4.3.2012, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



я понимаю о чем там говорится. но я не понимаю почему..
PM WWW   Вверх
mes
Дата 4.3.2012, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата

A unconditionally reference-preserving auto (e.g. an auto directly based on decltype) would favor an object-oriented
style of use to the detriment of types with value semantics. Basing auto on template argument deduction rules provides
a natural way for a programmer to express his intention. Controlling copying and referencing is essentially the same
as with variables whose types are declared explicitly. 

Цитата

а этот код точно корректный?

Цитата

The type deduction rules extend naturally to more complex definitions:
std::vector<auto> x = foo();
std::pair<auto, auto>& y = bar()


Цитата(boostcoder @  4.3.2012,  20:42 Найти цитируемый пост)
я понимаю о чем там говорится. но я не понимаю почему.. 

boostcoder, говорят что вывод типа и запрос типа имеют разное поведение, а не одно наследует другое.. 



Это сообщение отредактировал(а) mes - 4.3.2012, 21:46


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 4.3.2012, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Код

std::vector<decltype(foo())> x = foo();
std::pair<decltype(bar()), decltype(bar())>& y = bar()

не?

Добавлено через 1 минуту и 6 секунд
Цитата(mes @  4.3.2012,  21:43 Найти цитируемый пост)
а не одно наследует другое

как по мне, так запрос типа приводит к выводу типа. с несколько иной семантикой.

Добавлено через 2 минуты и 1 секунду
или?:
Код

std::pair<decltype(bar().first), decltype(bar().second)>& y = bar()

PM WWW   Вверх
mes
Дата 4.3.2012, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  4.3.2012,  20:48 Найти цитируемый пост)
не?

отдаленно соостветсвует такая запись :
Код

std::vector<decltype(foo())::value_type> x = foo();

но результат будет разный... 
плюс  наличие value_type может не быть smile

Добавлено через 3 минуты и 19 секунд
Цитата(boostcoder @  4.3.2012,  20:48 Найти цитируемый пост)
или?:

покажите теперь для примера упомянутого выше 
Код

 A<auto> a =  f (5); 



Это сообщение отредактировал(а) mes - 4.3.2012, 21:51


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 4.3.2012, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  4.3.2012,  21:50 Найти цитируемый пост)
 value_type может не быть

как его может не быть, если функция возвращает вектор?


Код

A<decltype(5)> a =  f (5); 


PM WWW   Вверх
mes
Дата 4.3.2012, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  4.3.2012,  20:59 Найти цитируемый пост)
как его может не быть, если функция возвращает вектор?

а что если кроме вектора ни к кому нельзя подобно применить авто ? см. пример с A smile

Добавлено через 1 минуту и 5 секунд
в случае с A<..> f ()  возвращает А<>.. 



--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 4.3.2012, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  4.3.2012,  22:01 Найти цитируемый пост)
а что если кроме вектора ни к кому нельзя подобно применить авто ?

опять не понял..

Цитата(mes @  4.3.2012,  22:01 Найти цитируемый пост)
см. пример с A

я же показал как разрулить его.
PM WWW   Вверх
mes
Дата 4.3.2012, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



в случае с A<..> f ()  возвращает А<>.. 

Цитата(boostcoder @  4.3.2012,  21:02 Найти цитируемый пост)
я же показал как разрулить его. 


как минимум, у Вас вместо А<int> будет А<А<int> >...




--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1070 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.