Почему 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; но я никогда не видел, чтобы кто-то действительно использовал подобные объявления. Так что мне интересно - какова цель такой возможности, потому что пока я вижу, что она создает только случай, похожий на пресловутый «самый неприятный анализ», и не добавляет ничего полезного?

Ответы на вопрос(2)

Ваш ответ на вопрос