2012-01-11 33 views
7

According to cppreference.com, the C++ static_cast operator's level of precedence is 2.Tại sao có mức độ ưu tiên cho các toán tử như static_cast?

Tại sao các cấp đó được xác định? Tôi không thể nghĩ ra lý do nào. Bất cứ ai có thể cung cấp một ví dụ? mức

+0

Nếu không có quyền ưu tiên, mã của bạn sẽ không xác định. – RageD

+0

Được ưu tiên cấp hai bằng cơ hội giống như ưu tiên cho ứng dụng chức năng? Và nguồn gốc của việc này là gì? –

+0

+1: Đó là một câu hỏi hợp lý, được tuyên bố hợp lý. –

Trả lời

4

Tiêu chuẩn không xác định mức độ ưu tiên; chúng có thể là bắt nguồn từ từ ngữ pháp.

Giống như bất kỳ tính năng cú pháp nào khác, static_cast có một vị trí trong ngữ pháp này. Bởi vì việc sử dụng nó đòi hỏi các dấu ngoặc đơn nên biểu thức toán tử của nó không bao giờ có thể mơ hồ, nhưng điều đó chỉ có nghĩa là nó không có ý nghĩa làm phiền một mức độ ưu tiên cho nó từ ngữ pháp, chứ không phải vị trí của nó trong ngữ pháp là vô nghĩa. Vì vậy, tiêu chuẩn không làm gì điên rồ ở đây.

Điều vô nghĩa là bất kỳ nguồn nào bạn trích dẫn đều liệt kê mức độ ưu tiên cho static_cast. Nó không phải là sai, nó chỉ là vô nghĩa.

+2

+1, lời giải thích hữu ích và thực sự hữu ích:) –

3

C++ cast nhà điều hành của tự ưu tiên là 2

Ai nói này? Tiêu chuẩn không xác định quyền ưu tiên của toán tử. Nó định nghĩa ngữ pháp theo ký hiệu giống như BNF.

+1

Hãy xem: http://en.cppreference.com/w/cpp/language/operator_precedence –

+1

@ChristianAmmer: 'cppreference.com' không phải là tiêu chuẩn. Vì vậy, đi và yêu cầu một trong những người đã viết trang này. Tôi đoán anh ta đã làm theo cách này bởi vì chính thức 'static_cast' là * biểu thức postfix *, cùng với' .', '->', '[]', v.v ... – ybungalobill

Các vấn đề liên quan