- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
int b;
int c();
template<class u, class v>
struct IsSameType
{
enum {r=0};
};
template<class u>
struct IsSameType<u,u>
{
enum {r=1};
};
//...
cout<<IsSameType<decltype(b),decltype(c())>::r<<endl;
cout<<IsSameType<decltype(b),decltype((b))>::r<<endl;
cout<<IsSameType<decltype(c()),decltype((b))>::r<<endl;
Сегодня увидим новую плюшку, что нам подарил новый стандарт С++0х.
1)Что на экране получим после выполнения данной программы?
2)Какие реально decltype возвращает типы в данных случаях?
Желательно ответить на оба вопроса, не компилируя. ^_^
*Ответ не знаю(*
Противоречие компилятора майкрософта самому себе поражает и я до сих пор не знаю, что там скрывается за типами, возвращаемыми decltype((
Ответ нашёл, попытавшись скомпилировать следующее:
decltype((b)) v2 = 0;
Осталось найти, что и где об этом говорит стандарт.
а почитать можно для начала википидию.
http://en.wikipedia.org/wiki/Decltype#Semantics
Офигеть интуитивность. Следующие строчки не эквивалентны, если foo() возвращает ссылку:
auto v = foo(); // копирование значения
decltype(foo()) v = foo(); // сохранение ссылки
ЭТО интуитивно?..
Хотя чую я, что уж хамяки - стандарт сам говна подкинет, вернее авторы.
Да я только за. Чем больше людей сами понимают свои желания, предпочтения и ограничения - тем меньше за ними потом разгребать.
Да, и на С++ тоже вполне можно писать просто и понятно даже для не особо посвящённых. Только 90% возможностей языка при этом использоваться не будут. И совсем не факт, что такая "понятность" пойдёт в плюс удобству и простоте поддержки.
Вдруг вы ещё не видели :)
компилиться, так что мы все спасены!
ваш, КО
- Это тот, где переменная, объявленная в заголовке цикла остаётся видна после него, а шаблоны настолько кастрированны, что на них даже факториал не напишешь? Ты мазохист, чтоли? Хотя что я спрашиваю, ты же программируешь на С++, всё и так ясно.