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?
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
@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
Vì tôi không biết trạng thái của đề xuất đó là gì :( – dyp