Ví dụ một tuyên bố như rằng:Tại sao C++ cho phép chúng ta bao quanh tên biến trong dấu ngoặc đơn khi khai báo một biến?
int (x) = 0;
Hoặc thậm chí rằng:
int (((x))) = 0;
tôi stumbled khi này vì trong mã của tôi, tôi đã xảy ra để có một đoạn tương tự như sau:
struct B
{
};
struct C
{
C (B *) {}
void f() {};
};
int main()
{
B *y;
C (y);
}
Rõ ràng tôi muốn xây dựng đối tượng C
mà sau đó sẽ làm điều gì đó hữu ích trong destructor của nó. Tuy nhiên khi nó xảy ra trình biên dịch xử lý C (y);
như một tuyên bố của biến y
với loại C
và do đó nó in một lỗi về y
định nghĩa lại. Điều thú vị là nếu tôi viết nó như là C (y).f()
hoặc như một cái gì đó như C (static_cast<B*> (y))
nó sẽ biên dịch như dự định. Cách giải quyết hiện đại tốt nhất là sử dụng {}
trong cuộc gọi hàm tạo, tất nhiên.
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 bất kỳ ai thực sự sử dụng các khai báo như thế này. Vì vậy, tôi quan tâm-đó là mục đích của khả năng như vậy bởi vì bây giờ tôi thấy rằng nó chỉ tạo ra các trường hợp tương tự như "nổi tiếng nhất phân tích cú pháp" và không thêm bất cứ điều gì hữu ích?
"Mục đích" của khả năng có thể đơn giản hóa trình phân tích cú pháp. – molbdnilo
có thể trùng lặp của [Mục đích của tuyên bố như int (x) là gì; hoặc int (x) = 10;] (http://stackoverflow.com/questions/26832321/what-is-the-purpose-of-a-declaration-like-int-x-or-int-x-10) – GSerg
@GSerg Vui cách văn bản câu hỏi của tôi trả lời cho câu hỏi từ câu trả lời thứ hai trong câu hỏi được liên kết của bạn, vì tôi cung cấp ví dụ cho phép khai báo như vậy dẫn đến kết quả không mong muốn :) – Predelnik