вторник, 15 марта 2011 г.

Я люблю c++

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 – опять же слабо понятно почему разрешен такой синтаксис.


 

1 комментарий:

  1. мне тут недавно такой же вопрос задали... только там был string. сам сразу не ответил :)

    ОтветитьУдалить