Почему C ++ позволяет нам заключать имя переменной в круглые скобки при объявлении переменной?
Например, такое объявление:
int (x) = 0;
Или даже это:
int (((x))) = 0;
Я наткнулся на это, потому что в моем коде у меня был фрагмент, подобный следующему:
struct B
{
};
struct C
{
C (B *) {}
void f () {};
};
int main()
{
B *y;
C (y);
}
Очевидно, я хотел построить объектC
который тогда сделал бы что-то полезное в своем деструкторе. Однако как это происходит компилятор лечитC (y);
как объявление переменнойy
с типомC
и таким образом он печатает ошибку оy
переопределение. Интересно, что если я напишу это какC (y).f ()
или как что-то вродеC (static_cast<B*> (y))
он будет скомпилирован как задумано. Лучший современный обходной путь заключается в использовании{}
в вызове конструктора, конечно.
Итак, как я понял после этого, можно объявить переменные какint (x) = 0;
или дажеint (((x))) = 0;
но я никогда не видел, чтобы кто-то действительно использовал подобные объявления. Так что мне интересно - какова цель такой возможности, потому что пока я вижу, что она создает только случай, похожий на пресловутый «самый неприятный анализ», и не добавляет ничего полезного?