Ví dụ một khai báo như sau:
int (x) = 0;
Hoặc thậm chí rằng:
int (((x))) = 0;
Tôi tình cờ gặp phải điều này vì trong mã của tôi, tôi đã tình cờ có một đoạn tương tự như đoạn sau:
struct B
{
};
struct C
{
C (B *) {}
void f () {};
};
int main()
{
B *y;
C (y);
}
Rõ ràng là tôi muốn xây dựng đối tượng C
mà sau đó sẽ làm điều gì đó hữu ích trong trình hủy của nó. Tuy nhiên, khi nó xảy ra, trình biên dịch coi C (y);
như một khai báo của biến y
có kiểu C
và do đó nó in ra lỗi về y
định nghĩa lại. Điều thú vị là nếu tôi viết nó như C (y).f ()
hoặc một cái gì đó giống như C (static_cast<B*> (y))
nó sẽ biên dịch như dự định. Tất nhiên, giải pháp hiện đại tốt nhất là sử dụng {}
trong lệnh gọi hàm tạo.
Vì vậy, như tôi đã tìm ra sau đó, có thể khai báo các biến như int (x) = 0;
hoặc thậm chí int (((x))) = 0;
nhưng tôi chưa bao giờ thấy ai thực sự sử dụng các khai báo như thế này. Vì vậy, tôi quan tâm - mục đích của khả năng như vậy là gì bởi vì hiện tại tôi thấy rằng nó chỉ tạo ra trường hợp tương tự như "phân tích cú pháp khó chịu nhất" khét tiếng và không thêm bất cứ điều gì hữu ích?