Bạn đang đơn giản hoá cấu trúc khai báo C++ (mặc dù các điểm bạn tạo là hoàn toàn hợp lý). Chỉ ngay từ cái nhìn đầu tiên, có vẻ như việc khai báo C++ bao gồm tên kiểu và một chuỗi các tên thực thể được phân tách bằng dấu phẩy, nhưng trên thực tế trong khai báo C++ (cũng như trong C) thực sự bao gồm tên kiểu và trình tự của các khai báo . Thông tin loại đầy đủ cho thực thể bạn khai báo được chia giữa hai các vị trí riêng biệt và một phần của nó thực sự là một phần của người khai báo. Nó chỉ là cách nó là trong C + +. Để phản ánh tốt hơn cấu trúc thực tế của việc kê khai (theo cách nhìn của ngôn ngữ), nó có thể là một ý tưởng tốt để khai báo định dạng như
int *a, *b;
nghĩa một cách rõ ràng nhóm *
s với tên thực thể, không phải với các loại Tên. (Nhưng cuối cùng đó là vấn đề sở thích cá nhân.)
Vì lý do tại sao nó được thiết kế theo cách đó trong ngôn ngữ, khi bạn hỏi một trong các ý kiến ... Như bạn đã biết, các phần của cú pháp khai báo như trên mô tả các loại thực thể được tuyên bố có thể xuất hiện ở phía bên trái của tên (như *
và &
) cũng như đứng về phía bên tay phải của nó (như ()
và []
) như trong
int *f(), (&g)[5], h[2][2];
Đối với các bit xuất hiện ở bên phải, đơn giản là không thể thực hiện theo bất kỳ cách nào khác. Họ không có lựa chọn nào khác ngoài việc được nhóm với tên thực thể, chứ không phải với tên loại. Người ta có thể hỏi thêm tại sao tờ khai nêu trên không được thực hiện trong C++ như
int *() f;
int (&)[5] g;
int [2][2] h;
(tức là tất cả mọi thứ liên quan đến loại xuất hiện ở phía bên tay trái trong một nhóm nhỏ gọn) ... Vâng, câu trả lời cho câu hỏi này là chỉ là nó là cách nó là trong C + +. Cách tiếp cận được kế thừa từ C và ở đó "tuyên bố phải giống với việc sử dụng" thường được trích dẫn như là lý do cơ bản.
P.S. Một điều cần nhớ (và những gì thường được giải thích không chính xác) là các vòng loại liền kề với tên kiểu trong khai báo là một phần của loại phổ biến, không phải là một phần của người khai báo cá nhân đầu tiên.Ví dụ
int const *a, *b;
tuyên bố const int *a
và const int *b
, không int *b
như một số có thể mistakingly tin. Vì lý do này cá nhân tôi thích sử dụng hợp lý hơn
const int *a, *b;
đặt hàng (mặc dù cùng một lúc tôi thích vào nhóm *
với tên, không phải với loại).
bản sao có thể có của http://stackoverflow.com/questions/377164/whats-your-preferred-pointer-declaration-style-and-why –
[Câu trả lời của Stroustrup] (http://www.stroustrup.com/bs_faq2 .html # khoảng trắng) cho cùng một câu hỏi. – legends2k