Tôi đã bắt đầu một dự án riêng tư mới và quyết định sử dụng thêm C++11/14 lần này. Vì vậy, tôi cũng bắt đầu sử dụng cú pháp trở lại mớiCú pháp trả về C++ mới có hạn chế không?
auto functionName() -> returnType;
Nó hoạt động cho hầu hết các phần rất tốt, nhưng bây giờ tôi cần một số xử lý lỗi và không thể tìm ra cách để re-write thứ như thế này:
virtual const char* what() const noexcept override;
với cú pháp mới. Có một số trường hợp không thể sử dụng cú pháp mới hoặc tôi không đủ thông minh để tìm đúng thứ tự? Đối với tôi, điều quan trọng là giữ cho mọi thứ nhất quán, vì vậy tôi hy vọng vấn đề là nhiều hơn về phía tôi.
cho noexcept thấy ở đây: http://stackoverflow.com/questions/16598320/trailing-return-type-syntax-fails-with-noexcept-specifier –
Kiểu trả về điều mới thực sự là một hack để cho phép việc sử dụng decltype() trên các tham số hàm. Vì các tham số hàm chỉ có thể được sử dụng trong decltype _after_ chúng đã được khai báo, nên một cấu trúc như vậy không thể được đặt ở vị trí 'cũ' cho kiểu trả về - vì vậy chúng di chuyển kiểu trả về xung quanh. Theo tôi, điều này đang giúp các nhà biên dịch biên dịch quá nhiều với chi phí làm cho toàn bộ ngôn ngữ trở nên vô dụng đối với mọi người khác. Ở mức độ nào, không có lý do ý thức hệ để bạn chuyển đổi toàn bộ dự án sang cú pháp 'mới'; nó vốn không tốt hơn hoặc hiện đại hơn. –
Tôi không biết bất kỳ lý do nào để sử dụng cú pháp kiểu trả về theo đuôi trong mã không chung, trừ khi bạn cho rằng nó trông đẹp hơn. Có một số tính năng C++ 11 như 'tự động' hoặc khởi tạo cú đúp được cho là được sử dụng" theo mặc định "trong tất cả mã" hiện đại ", nhưng tôi chắc chắn các kiểu trả về chỉ tồn tại để hỗ trợ một tập con nhất định typesafe generic code mà không thể viết trước đó. – Ixrec