Наприклад декларація типу:
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;
але я ніколи не бачив, щоб хтось насправді використовував такі оголошення. Отже, мене цікавить - яка мета такої можливості, оскільки на даний момент я бачу, що вона створює лише випадок, подібний до горезвісного "найбільш неприємного розбору", і не додає нічого корисного?