Вопрос для аттестации сотрудников по С++
От: SergeyT. США http://sergeyteplyakov.blogspot.com/
Дата: 15.02.10 10:02
Оценка:
Здравствуй, all.
Один знакомый камрад попросил пройти аттестацию, которую он подготовил для сотрудников компании.
Здесь я приведу 2 из 15 вопросов, которые, с моей точки зрения стоит обсудить.

1. Чему будет равно значение А<9>::vаluе + А<2,2>::vаluе если структура А определена следующим образом:


tеmplаtе<unsignеd N, unsignеd I=0>
struсt А : А<N/2,I+1>{};

tеmрlаtе<unsignеd I>
struсt А<0,I>
{
    stаtiс соnst unsignеd vаluе = I ;
};



2. Что будет выведено в результате выполнения данной программы :

template<class T, class U>
struct A{
    struct dummy{char _[2];};
    static char _(T);
    static dummy _(...);
    static const bool value=sizeof(_(U()) )==sizeof(char);
};
struct B{};
struct C:B{};
...
cout << A<B,C>::value << A<B,B>::value << A<C,B>::value;



Вопросов у меня несколько:
1. Кто как относится к применению тестов для аттестации сотрудников?
2. Насколько уместны вопросы по метапрограммированию если ответ на предыдущий вопрос положительный?
3. Что за хрень в последнем вопросе? Я даже увидев результат не смог раскусить ответ. Судя по результату оператор sizeof получает размер типа возвращаемого значения, которое возвращается функцией "_", при этом в зависимости от параметров шаблона выбирается разная функция: в некоторых случаях static char _(T);, а в некоторых: static dummy _(...); (очевидно, последняя выбирается в том случае, когда нет неявного преобразования между типами U и T).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.