簡體   English   中英

C ++異常拋出語法

[英]C++ exception throwing syntax

我目前正在閱讀一本C ++書,遇到了我不知道如何解釋的以下代碼:

#include <exception>
#include <memory>
struct empty_stack: std::exception // don't know what the code after : means
{
     const char* what() const throw(); //don't understand this line either
};

struct empty_stack: std::exception // don't know what the code after : means

這意味着empty_stack 公開繼承std::exception ,后者是標准異常的基類。

注意:如果未指定繼承類型,則默認的繼承類型取決於繼承類型。 如果繼承類型為class ,則為private如果繼承類型為struct則為public

const char* what() const throw(); //don't understand this line either

這意味着what()是不會修改其所屬類的非可變成員的函數,並且不會引發任何異常。 但是,如果在結尾處使用throw()表示它不會拋出,則會有些誤導。

因此,從C ++ 11開始,我們有了noexcept說明符。 在如下所示的函數聲明中使用此函數意味着該函數聲明為不引發任何異常。

const char* what() const noexcept;

注意throw()已過時,將在C ++ 20中刪除。

const char* what() const throw();
  • const char*表示該方法返回一個指向const char的指針,這是C語言中字符串的典型類型(和C ++,用於向后兼容)

  • 方法名稱是what

  • 第二個const表示不允許該方法修改該類的任何非可變成員,或者如果未被標記為mutable ,則基本上不允許該方法修改任何成員

  • throw()表示允許該方法“什么都沒有”拋出,所以不允許它拋出。 可以推斷,當引發異常時,此功能應該是您的最后一道防線。 在其中拋出異常將破壞目標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM