1 void f()
2 {
3 int t;
4 SomeType obj(OtherType(t));
5 obj.method();
6 }
Что такое obj? Казалось бы – переменная типа SomeType. Однако на самом деле – это объявление функции SomeType obj(OtherType t);
Причем на строку 5 MSVC даст вот такую ошибку:
error C2228: left of '.method' must have class/struct/union
Уже не первый раз напарываюсь, но в ступор все равно вгоняет на пару минут…
Чтобы работало, надо заключить OtherType в скобки:
SomeType obj( (OtherType) (t));
Получается так потому, что:
1. Разрешены локальные объявления функций – слабо понятно зачем такое вообще может кому-нить понадобиться.
2. int (t) – это вполне корректное определение переменной t типа int – опять же слабо понятно почему разрешен такой синтаксис.
мне тут недавно такой же вопрос задали... только там был string. сам сразу не ответил :)
ОтветитьУдалить