2015-05-26 18 views
23

Tôi đã nghe rằng từ khóa noexcept giống như 'nó không bao giờ nên ném ngoại lệ' thay vì 'nó không'.Có một bộ chỉ định không nhận dạng tự động không?

Tôi không nghĩ rằng việc sử dụng từ khóa noexcept là tốt nếu tôi không chắc là nó có ngoại lệ hay không, nhưng từ khóa đôi khi liên quan đến hiệu suất như trong một hàm tạo di chuyển.

Vì vậy, tôi đã cố gắng sử dụng noexcept vòng loại, nhưng sẽ khó hơn nếu có nhiều câu lệnh trong định nghĩa và nó trở thành một loại sao chép và dán.

template <class T> 
void f(T&& t) 
    noexcept(noexcept(statement_1) && 
      noexcept(statement_2) && 
      noexcept(statement_3) && 
      noexcept(statement_4) && 
      noexcept(statement_5)) 
{ 
    statement_1; 
    statement_2; 
    statement_3; 
    statement_4; 
    statement_5; 
} 

Tôi nghĩ rằng trình biên dịch có thể tìm hiểu xem các định nghĩa của một hàm bao gồm các báo cáo không ném, vì vậy nó sẽ dễ dàng hơn để sử dụng noexcept nếu có một biểu hiện như noexcept(auto), nhưng có vẻ như là không có như vậy điều trong tiêu chuẩn.

Có cách nào để đơn giản hóa biểu thức không được chấp nhận không?

+12

http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/n4473.html (ý tưởng cũ hơn nhiều, ví dụ: http://www.open-std.org/ jtc1/sc22/wg21/docs/papers/2010/n3207.htm) – dyp

+1

@dyp Cảm ơn !! Tại sao bạn không đặt nó trong một câu trả lời để tôi có thể chấp nhận nó? – kukyakya

+0

Vì tôi không biết trạng thái của đề xuất đó là gì :( – dyp

Trả lời

6

Hiện tại không có thẻ nào. Tuy nhiên, đề xuất về chủ đề đó, đề xuất cú pháp noexcept(auto): http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4473 Trạng thái của đề xuất này là "cần thêm công việc", theo Báo cáo chuyến đi của Cotond Ballo: Hội nghị tiêu chuẩn C++ ở Lenexa, tháng 5 năm 2015 "https://botondballo.wordpress.com/2015/06/05/trip-report-c-standards-meeting-in-lenexa-may-2015/

Công việc tiếp theo. Hướng của đề xuất là đầy hứa hẹn, nhưng nó không phải là thịt không đủ tốt, hoặc có những mối quan tâm cụ thể với một hoặc nhiều điểm thiết kế. Tác giả được khuyến khích quay trở lại với một đề nghị sửa đổi được thêm thịt và/hoặc giải quyết các mối quan tâm đã nêu.

...

noexcept (tự động), mà về cơ bản có nghĩa là “suy ra noexcept-Ness của chức năng này từ noexcept-Ness trong những chức năng mà họ gọi. Giống như khấu trừ kiểu trả về, điều này đòi hỏi phần thân của hàm có sẵn trong mỗi đơn vị dịch sử dụng hàm. Nó được đưa ra, cùng với đề xuất đưa ra một số đặc điểm ngoại lệ của hệ thống kiểu, điều này có nghĩa là sửa đổi cơ thể của hàm có thể thay đổi kiểu của hàm (tương tự như loại trừ trả về), nhưng mọi người không quá lo lắng về cái đó.

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