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

Поиск:

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


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


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

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



volatile,, грубо,  означает что тип переменной определяется ниже по тексту .. 
smile



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


Эксперт
****


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

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



Цитата(mes @  5.3.2012,  00:32 Найти цитируемый пост)
ниже по тексту .. 

щас просмотрел ваши посты, и как назло, нигде не нашел, где именно тип определяется ниже по тексту.
возможно конечно что-то пропустил  smile 
Цитата(mes @  4.3.2012,  21:31 Найти цитируемый пост)
template <typename T>
struct A {};
template <typename T>
A<T> f(T  ) { return A<T> (); } 


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


Цитата(newbee @  4.3.2012,  22:10 Найти цитируемый пост)
template<typename T>
struct X{};

X<int> foo(std::string const&);

X<auto> x=foo("Alice Cooper - Hey stupid");


Везде тип определен, и определен строго выше. (ну или в той-же самой строчке)

PM MAIL   Вверх
newbee
Дата 5.3.2012, 01:01 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


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

Репутация: 4
Всего: 19



Цитата(volatile @  5.3.2012,  01:44 Найти цитируемый пост)
(ну или в той-же самой строчке)
"Справа" по тексту это тоже "ниже".



--------------------
You're face to face
With man who sold the world
PM   Вверх
volatile
Дата 5.3.2012, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



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

Цитата(newbee @  5.3.2012,  00:05 Найти цитируемый пост)
Все зависит от того, что считать под "заранее неизвестная". 

Цитата(mes @  5.3.2012,  00:32 Найти цитируемый пост)
грубо,  означает что тип переменной определяется ниже по тексту 

Цитата(newbee @  5.3.2012,  01:01 Найти цитируемый пост)
"Справа" по тексту это тоже "ниже".


Итак, к чему нас привела логическая цепочка:
Цитата
auto же вычисляет тип выражения, находящегося справа по тексту


Замечательно!
Стоило ли разводить столько шума?  smile

Добавлено через 1 минуту и 36 секунд
Кто бы с этим спорил  smile 
PM MAIL   Вверх
mes
Дата 5.3.2012, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(volatile @  4.3.2012,  23:44 Найти цитируемый пост)
Везде тип определен, и определен строго выше. 

определены другие типых, а наш либо запрошен до/при определении ( при  decltype(expr) val = expr ) либо выведен (auto) после определения... 




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


Бревно
**


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

Репутация: 4
Всего: 19



Цитата(volatile @  5.3.2012,  02:16 Найти цитируемый пост)
Стоило ли разводить столько шума? 
Шумел тут только один благородный дон по-моему, а целая бригада врачей пыталась его успокоить.



--------------------
You're face to face
With man who sold the world
PM   Вверх
mes
Дата 5.3.2012, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(volatile @  5.3.2012,  00:16 Найти цитируемый пост)
Замечательно!
Стоило ли разводить столько шума? 

ну это вопрос к тем, кто сразу шуметь начал, вместо попытки понять сказанное smile

Добавлено через 1 минуту и 30 секунд
Цитата(volatile @  5.3.2012,  00:16 Найти цитируемый пост)
 к чему нас привела логическая цепочка:

эта логическая цепочка было определена еще в самом начале разгорания шума, однако ж от дальнейшего его развития не спасла ))




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


pattern`щик
****


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

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



раз я задался этим вопросом, очевидно, что я не не знаю на него ответа.
но три страницы примеров и "разговоров" которые никак не отвечают на вопрос, согласитесь, начнут раздражать любого. ибо это смотрится смешно.
типа: "я умный. я тебе показываю. а ты дебил, не понимаешь."

прошу прощения за грубость. но чем так "объяснять" - лучше молчать.

не пришла бы ньюбка, еще бы несколько страниц вы мне "объясняли".
спасибо.

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


pattern`щик
****


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

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



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

что-то тут не вяжется...

Добавлено через 40 секунд
Цитата(boostcoder @  5.3.2012,  07:18 Найти цитируемый пост)
три страницы

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


pattern`щик
****


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

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



этим поставим точку в примерах с auto в качестве параметра шаблона.
еще "объяснения" будут?

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


Шустрый
*


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

Репутация: 6
Всего: 7



Цитата(boostcoder @ 1.3.2012,  19:44)
Цитата

new auto(a)

кто-нибудь, объясните, как это работает.
я представляю то вместо auto тут должен быть decltype():
Цитата

new decltype(a)(a);

http://liveworkspace.org/code/9f1050e8f6d4...dc87286e11985cd

C++ 2011 (draft n3290), 7.1.6.4 auto specifier:

Цитата

...
4. The auto type-specifier can also be used in declaring a variable in the condition of a selection statement (6.4) or
     an iteration statement (6.5), in the type-specifier-seq in the new-type-id or type-id of a new-expression (5.3.4), in
     a for-range-declaration, and in declaring a static data member with a brace-or-equal-initializer that appears
     within the member-specification of a class definition (9.4.2).
...


С "new auto(a)" по стандарту вроде все нормально, а вот на счет следующего кода у меня большие сомнения.

Код

template<typename T>
struct X{};
X<int> foo(std::string const&);
X<auto> x=foo("Alice Cooper - Hey stupid");


Во всяком случае в стандарте четко указаны случаи, где можно использовать auto. А вот пункт, легализирующий выше приведенный код, я не увидел:

C++ 2011 (draft n3290), 7.1.6.4 auto specifier:

Цитата

1 The auto type-specifier signifies that the type of a variable being declared shall be deduced from its initializer
    or that a function declarator shall include a trailing-return-type.

2 The auto type-specifier may appear with a function declarator with a trailing-return-type (8.3.5) in any
    context where such a declarator is valid.

3 Otherwise, the type of the variable is deduced from its initializer. The name of the variable being declared
    shall not appear in the initializer expression. This use of auto is allowed when declaring variables in a
    block (6.3), in namespace scope (3.3.6), and in a for-init-statement (6.5.3). auto shall appear as one of
    the decl-specifiers in the decl-specifier-seq and the decl-specifier-seq shall be followed by one or more init-
    declarators, each of which shall have a non-empty initializer.

  [ Example:
                                      // OK: x has type int
     auto x = 5;
                                      // OK: v has type const int*, u has type const int
     const auto *v = &x, u = 6;
                                      // OK: y has type double
     static auto y = 0.0;
                                      // error: auto is not a storage-class-specifier
     auto int r;
   — end example ]

4 The auto type-specifier can also be used in declaring a variable in the condition of a selection statement (6.4) or
    an iteration statement (6.5), in the type-specifier-seq in the new-type-id or type-id of a new-expression (5.3.4), in
    a for-range-declaration, and in declaring a static data member with a brace-or-equal-initializer that appears
    within the member-specification of a class definition (9.4.2).

5 A program that uses auto in a context not explicitly allowed in this section is ill-formed.

6 Once the type of a declarator-id has been determined according to 8.3, the type of the declared variable
    using the declarator-id is determined from the type of its initializer using the rules for template argument
    deduction. Let T be the type that has been determined for a variable identifier d. Obtain P from T by
    replacing the occurrences of auto with either a new invented type template parameter U or, if the initializer
    is a braced-init-list (8.5.4), with std::initializer_list<U>. The type deduced for the variable d is then
    the deduced A determined using the rules of template argument deduction from a function call (14.8.2.1),
    where P is a function template parameter type and the initializer for d is the corresponding argument. If
    the deduction fails, the declaration is ill-formed. 

  [ Example:
                                      // decltype(x1) is std::initializer_list<int>
     auto x1 = { 1, 2 };
                                      // error: cannot deduce element type
     auto x2 = { 1, 2.0 };
   — end example ]

7 If the list of declarators contains more than one declarator, the type of each declared variable is determined
  as described above. If the type deduced for the template parameter U is not the same in each deduction, the
  program is ill-formed.

  [ Example:
     const auto &i = expr;

  The type of i is the deduced type of the parameter u in the call f(expr) of the following invented function
  template:
     template <class U> void f(const U& u);
   — end example ]

PM MAIL   Вверх
baldina
Дата 5.3.2012, 18:37 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 32
Всего: 101



сколько интересного я пропустил...
а уж сколько нового узнал smile

кстати, насчет семантики. я (простите мою склонность к обобщениям и упрощениям) понимаю decltyte(x) как - "верни(подставь) тип выражения х". тип, естественно, известный (компилятору) в этой точке.
a auto x=y - как "определи-ка сам тип выражения х по выражению y", т.е. еще неизвестный компилятору, но который компилятор может вывести.
поэтому и конструкция была вида p=auto(x), но не decltype()
ну и несколько магический вид, конечно, привлекает

еще не пойму чего на k0rvin набросились. вот в случае определения типов при использовании шаблонов говорят о выводе типа (компилятором), однако  это никого не смущает, никто не кричит что С++ статически типизирован. все и так ясно.
PM MAIL   Вверх
volatile
Дата 6.3.2012, 00:12 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(baldina @  5.3.2012,  18:37 Найти цитируемый пост)
определи-ка сам тип выражения х по выражению y", т.е. еще неизвестный компилятору

я просто думаю что здесь не совсем уместно слово неизвестный. Оно сбивает с толку.
Допускаю что эту терминологию придумали не здесь, а кто-то "свыше спустил", но тем не менее, 
Если так рассуждать, то
Код

int func (int, int);
char* func (int);
int c = func (1, 2);
Здесь (с) принимает значение заранее неивестнго типа от функции, с заранее неивестным количесвом аргуметнов.
Разве нет? оно находится справа по тексту, значит, согласно принятой ныне терминологии, оно неизвестно.

Лучше называть вещи своими именами. 
вычисляет выражение стоящее справа по тексту -  имхо, четко и ясно.

PM MAIL   Вверх
mes
Дата 6.3.2012, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



rumit7
Цитата(rumit7 @  5.3.2012,  08:36 Найти цитируемый пост)
, где можно использовать auto

в теме уже было написано, на текущий момент auto не предтавляет всех, тех возможностей, возложенных на него.. будем-с ждать smile
но это не мешает рассуждать  и сравнивать... спор по сути был не об auto, а о type querying и type deduction.. с отклонением на понятие "неизвестного на данный момент типа"..

Добавлено через 5 минут и 2 секунды
Цитата(baldina @  5.3.2012,  17:37 Найти цитируемый пост)
 вот в случае определения типов при использовании шаблонов говорят о выводе типа (компилятором),

просто когда речь касается "неизвестности типа"  рассуждают с точки зрения конечного  результата.. Тип же в конце концов становится известным компилятору ?значит известен.. И как аргумент приводят, ведь для вычисления все известно, значит и вычисленное заранее известно.. 



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


pattern`щик
****


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

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



Цитата(mes @  6.3.2012,  09:14 Найти цитируемый пост)
будем-с ждать

следующего стандарта?
PM WWW   Вверх
Страницы: (8) Все « Первая ... 4 5 [6] 7 8 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.1221 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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