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

Поиск:

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


pattern`щик
****


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

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



Цитата(k0rvin @  4.3.2012,  14:53 Найти цитируемый пост)
auto же вычисляет тип выражения, тип которого, заранее неизвестен.

неправда smile

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


Опытный
**


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

Репутация: 1
Всего: 5



Цитата(boostcoder @ 4.3.2012,  15:06)
неправда smile

истинная правда.

Добавлено через 37 секунд
Ну разве что точнее "заранее неопределен"


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
boostcoder
Дата 4.3.2012, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(k0rvin @  4.3.2012,  15:25 Найти цитируемый пост)
истинная правда.

постыдились бы.

auto, компилятор разворачивает как:
Код

auto i = expr;
// ->
decltype(expr) i = expr;


Добавлено через 1 минуту и 12 секунд
Цитата(k0rvin @  4.3.2012,  14:53 Найти цитируемый пост)
auto же вычисляет тип выражения, тип которого, заранее неизвестен.

это возможно только в ран-тайме. а с++ - не динамический язык.
PM WWW   Вверх
k0rvin
Дата 4.3.2012, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 5



Цитата(boostcoder @ 4.3.2012,  15:30)
Цитата(k0rvin @  4.3.2012,  15:25 Найти цитируемый пост)
истинная правда.

постыдились бы.

auto, компилятор разворачивает как:
Код

auto i = expr;
// ->
decltype(expr) i = expr;


Добавлено @ 15:32
Цитата(k0rvin @  4.3.2012,  14:53 Найти цитируемый пост)
auto же вычисляет тип выражения, тип которого, заранее неизвестен.

это возможно только в ран-тайме. а с++ - не динамический язык.

"постыдились бы"

http://en.wikipedia.org/wiki/Type_inference
http://en.wikipedia.org/wiki/C%2B%2B11#Type_inference

И никакой динамической типизации.


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
boostcoder
Дата 4.3.2012, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(k0rvin @  4.3.2012,  16:50 Найти цитируемый пост)
http://en.wikipedia.org/wiki/C%2B%2B11#Type_inference

так сами и прочтите о чем там пишут.

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


Опытный
**


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

Репутация: 1
Всего: 5



Цитата(boostcoder @ 4.3.2012,  17:19)
Цитата(k0rvin @  4.3.2012,  16:50 Найти цитируемый пост)
http://en.wikipedia.org/wiki/C%2B%2B11#Type_inference

так сами и прочтите о чем там пишут.

Я-то прочел, а ты?

Добавлено через 5 минут и 21 секунду
Рекомендую для понимания обратить внимание на этот пример:
Цитата

The type denoted by decltype can be different from the type deduced by auto.
Код

#include <vector>
int main()
{
    const std::vector<int> v(1);
    auto a = v[0];        // a has type int
    decltype(v[0]) b = 1; // b has type const int&, the return type of
                        // std::vector<int>::operator[](size_type) const
    auto c = 0;           // c has type int
    auto d = c;           // d has type int
    decltype(c) e;        // e has type int, the type of the entity named by c
    decltype((c)) f = c;  // f has type int&, because (c) is an lvalue
    decltype(0) g;        // g has type int, because 0 is an rvalue
}




--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
boostcoder
Дата 4.3.2012, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



если Вы прочли, то что же Вы этим сказать хотели?:
Цитата(k0rvin @  1.3.2012,  22:34 Найти цитируемый пост)
decltype для вывода типов?


или Вы просто троллите?

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


Опытный
**


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

Репутация: 1
Всего: 5



Цитата(boostcoder @ 4.3.2012,  17:38)
если Вы прочли, то что же Вы этим сказать хотели?:
Цитата(k0rvin @  1.3.2012,  22:34 Найти цитируемый пост)
decltype для вывода типов?


или Вы просто троллите?

Я этим задал вопрос (знак вопроса '?' как бы говорит нам об этом). В вопросе содержался намек, что decltype — это не вывод типов, чтобы автор поста про decltype задумался.

Это сообщение отредактировал(а) k0rvin - 4.3.2012, 17:43


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
boostcoder
Дата 4.3.2012, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(k0rvin @  4.3.2012,  17:41 Найти цитируемый пост)
decltype — это не вывод типов

а что же это?
PM WWW   Вверх
volatile
Дата 4.3.2012, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 37
Всего: 85



Цитата(k0rvin @  4.3.2012,  17:21 Найти цитируемый пост)
#include <vector>
    const std::vector<int> v(1);
    auto a = v[0];        // a has type int
    decltype(v[0]) b = 1; // b has type const int&, the return type of
                        // std::vector<int>::operator[](size_type) const
    auto c = 0;           // c has type int
    auto d = c;           // d has type int
    decltype© e;        // e has type int, the type of the entity named by c
    decltype(©) f = c;  // f has type int&, because © is an lvalue
    decltype(0) g;        // g has type int, because 0 is an rvalue
}

k0rvin, в какой строчке тип заранее не известен?

Цитата(k0rvin @  4.3.2012,  14:53 Найти цитируемый пост)
auto же вычисляет тип выражения, тип которого, заранее неизвестен.

В С/С++ впринципе это невозможно. Просто по определению  smile 
С/С++ язык со статической типизацией - и этим все сказано.
PM MAIL   Вверх
boostcoder
Дата 4.3.2012, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



http://stackoverflow.com/questions/6869888...to-and-decltype

или я "таво", или второе...

Добавлено через 1 минуту и 38 секунд
Цитата(volatile @  4.3.2012,  17:49 Найти цитируемый пост)
В С/С++ впринципе это невозможно. Просто по определению   
С/С++ язык со статической типизацией - и этим все сказано.

я тоже пытался обратить его внимание на это. но после ответа, я уже начал сомневаться в себе smile 
PM WWW   Вверх
k0rvin
Дата 4.3.2012, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 5



Цитата(volatile @ 4.3.2012,  17:49)
Цитата(k0rvin @  4.3.2012,  14:53 Найти цитируемый пост)
auto же вычисляет тип выражения, тип которого, заранее неизвестен.

В С/С++ впринципе это невозможно. Просто по определению  smile 
С/С++ язык со статической типизацией - и этим все сказано.

Ты ведь не прочитал, что такое "Вывод типов", да? Хаскелл, *ML — тоже языки со статической типизацией.

Добавлено через 1 минуту и 46 секунд
Цитата(boostcoder @ 4.3.2012,  17:51)
я тоже пытался обратить его внимание на это. но после ответа, я уже начал сомневаться в себе smile

И тебе: вывод типов — это техника для статически типизированного языка

Добавлено через 2 минуты и 39 секунд
Цитата(boostcoder @ 4.3.2012,  17:51)
http://stackoverflow.com/questions/6869888...to-and-decltype

т.е. ты не видишь разницу между decltype и auto?


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
volatile
Дата 4.3.2012, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 37
Всего: 85



k0rvin, просто у auto и decltype разная семантика.
auto чудес не совершает.
В любом месте где стоит ауто, компилер точно знает какой именно тип туда нужно поставить.
Причем знает это он в момент компиляции.


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


Опытный
**


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

Репутация: 1
Всего: 5



Цитата(volatile @ 4.3.2012,  17:49)
Цитата(k0rvin @  4.3.2012,  17:21 Найти цитируемый пост)
#include <vector>
    const std::vector<int> v(1);
    auto a = v[0];        // a has type int
    decltype(v[0]) b = 1; // b has type const int&, the return type of

k0rvin, в какой строчке тип заранее не известен?

Тип переменной a заранее не известен, он вычисляется из определения a = v[0]:
Код

const std::vector<int> v(1);
    auto a = v[0];
--
    auto a = <Vector<int>>[0]; // операция [] имеет тип что-то вроде "A (C<A>)", отсюда компилятор, применяя [] к типу Vector<int> (в качестве C<A>) выводит тип a как int.

Зато тип b вычисляется из заранее типизированного выражения, decltype без всяких махинаций берет тип выражения v[0] и приписывает его переменной v.
Т.е. суть в том, что тип переменной a определяется из выражения справа, а тип переменной b из выражения слева (decltype).
Например, если изменить код примерно так:
Код

String foo (int x) {
    return IntToString(x);
}

const std::vector<int> v(1);
    auto a = foo(v[0]);        // a has type int
    decltype(v[0]) b = foo(1); // b has type const int&, the return type of

то a определится как String и вообще строка с определением a будет работать, а стрка с определением b -- нет.

Добавлено через 49 секунд
Цитата(volatile @ 4.3.2012,  18:07)
k0rvin, просто у auto и decltype разная семантика.

Хвала яйцам, кто-то это понял наконец-то.


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
boostcoder
Дата 4.3.2012, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(k0rvin @  4.3.2012,  17:55 Найти цитируемый пост)
ты не видишь разницу между decltype и auto?

без decltype не существовало бы auto. auto реализован "поверх" decltype, с немного другой семантикой. но вывод типов - это decltype.

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

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

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

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

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


 




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


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

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