Ghi chú không quy chuẩn trong tiêu chuẩn nhằm thúc đẩy khái niệm biểu thức, nhưng không phải là định nghĩa thực tế. Định nghĩa của biểu hiện được đưa ra trong ngữ pháp ngôn ngữ được đưa ra trong phần còn lại của khoản 5. Biểu thức được xây dựng trên một số thiết bị đầu cuối như chữ, tên biến và tên hàm, được kết hợp sử dụng toán tử như số học và các nhà khai thác quan hệ.
Tuyên bố và biểu thức là các thực thể cú pháp riêng biệt, do đó, một khai báo được tìm thấy bên trong chương trình C++ không bao giờ là biểu thức, và ngược lại. Sự khác biệt là khá dễ dàng để xem trong nháy mắt: nếu nó tuyên bố một cái gì đó, đó là một tuyên bố.
1; // expression statement
int i = 1; // declaration statement that declares `i`
A(i, 42); // expression statement that creates an A object
A a(i); // declaration statement that declares an A object (named a)
Một tuyên bố có thể đánh giá biểu nhưng một tuyên bố không phải là một biểu thức. Bạn phải chỉ ra rằng việc khai báo một đối tượng kiểu lớp có thể gây ra một cuộc gọi hàm tạo. Tuy nhiên nó là cú pháp một tuyên bố chứ không phải là một biểu thức.
Tuy nhiên, có một ý nghĩa khác trong đó tuyên bố là một biểu thức. Cụ thể, các quy tắc về trình tự đánh giá trong các biểu thức cũng áp dụng cho các khai báo. Ví dụ, có một quy tắc rằng tác dụng phụ của một hậu tố tăng trên int
diễn ra tại một số điểm trước khi kết thúc biểu thức đầy đủ.
f(i++) + g(); // i may be incremented before or after g() is called...
h(); // but definitely before h() is called.
Vì mục đích của quy tắc này, việc khai báo và khởi tạo một biến đơn lẻ được coi là biểu hiện đầy đủ. Trong trường hợp của một biến kiểu lớp, lời gọi hàm tạo là một phần của biểu thức đó.
int i = 1; // this declaration evaluates a full-expression
// whose effect is to initialize `i` to 1
int j = f(i++) + g(), k = h(); // two separate full-expressions;
// i is incremented before h() is called
Khi đọc tiêu chuẩn, bạn cần xem xét ngữ cảnh để tìm hiểu ý nghĩa của "biểu thức" có nghĩa là gì.
Bản sao có thể có của [câu lệnh biểu thức và biểu thức trong C++ là gì?] (Http: // stackoverflow.com/questions/7479946/whats-an-expression-và-expression-statement-in-c) –
Quy tắc đơn giản là biểu thức không có dấu chấm phẩy. Thêm dấu chấm phẩy biến chúng thành các câu lệnh. Ngoài ra, một biểu thức là một cái gì đó bạn có thể bọc bằng dấu ngoặc đơn và sử dụng bên trong một biểu thức khác. Bạn không thể viết 'x = (int i = 1;)'. –
Kiểm tra ngữ pháp, tôi đã trích xuất ngữ pháp ở đây: https://github.com/o11c/chintzy/blob/master-py/chintzy/_std/cxx14.py#L559 – o11c