[英]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 ()
我從這里讀到的是那個
const char *
是返回類型,指向常量字符的指針,按慣例,是以零結尾的字符串數組的第一個字符。
what
是功能名稱
()
是一個空參數列表,表示該函數不帶參數
const
限定了函數,因此可以在const
對象上調用它,並且不能直接修改對象的成員
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.