簡體   English   中英

無法理解此C ++表達式的語法/結構

[英]Can't understand the syntax/structure of this C++ expression

請讓我澄清一下,在解釋問題時我可能會使用不正確的術語。 請耐心等待 - 指出缺陷,但我希望我的問題的本質在線之間傳達。

#include <iostream>
#include <exception>
using namespace std;

struct MyException : public exception { 
   const char * what () const throw () {
      return "C++ Exception";
   }
};

int main() {
   try {
      throw MyException();
   } catch(MyException& e) {
      std::cout << "MyException caught" << std::endl;
      std::cout << e.what() << std::endl;
   } catch(std::exception& e) {
      //Other errors
   }
}

我正在嘗試學習C ++,之前學過C語言。

在上面的代碼中,我不理解特定行的語法:

const char * what () const throw ()

我從這里讀到的是那個

  1. const char *是返回類型,指向常量字符的指針,按慣例,是以零結尾的字符串數組的第一個字符。

  2. what是功能名稱

  3. ()是一個空參數列表,表示該函數不帶參數

  4. const限定了函數,因此可以在const對象上調用它,並且不能直接修改對象的成員

  5. throw ()是一個異常規范,可以防止它拋出任何異常。

但我不明白的是:

在引用C中的函數時,我們將它們定義為

return_type function_ name
  {function_body;
  } 

所以雖然我理解const char *是這里的返回類型; 因此, what必須是函數名; 我不明白功能體是什么部分。

我最近意識到C ++中的throw函數; 但是為什么有一個'()'之后what 如果throw()是一個函數,那么它的返回類型是什么? 我們在這里定義throw()或在這里定義what()嗎?

這是一個不推薦使用的動態無拋出說明符。 看到這里 它不是一個額外的函數調用。 它更確定了這個函數的行為,在這種情況下,它是否拋出異常,在這種情況下它不會。

在引用C中的函數時,我們將它們定義為

 return_type function_ name {function_body; } 

這同樣適用於C ++。 只是在function_name{function_body}之間也可以有其他可選說明符。

所以雖然我理解const char *是這里的返回類型; 因此, what必須是函數名;

是。

我不明白功能體是什么部分。

正是你所期望的 - 花括號之間的部分:

{ return "C++ Exception"; }

我最近意識到C ++中的throw函數;

它不是一個功能。

但是為什么有一個'()'之后what

您在問題中已經說過的原因:“一個空的參數列表,表明該函數不帶參數”。

如果throw()是一個函數

它不是。 它符合條件what()因為合同不會拋出任何異常。 函數的throw說明符的括號表示函數可能拋出的實際異常類型,如果不允許則可以為空。

我們在這里定義throw()或在這里定義what()嗎?

what()

暫無
暫無

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

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