C++ 中方法签名在结束括号和开始大括号之间的部分是什么?
What is the part of a method signature in C++ between the ending parenthesis and beginning curly bracket?
我开始学习 C++,方法签名中有一些我以前从未见过的语法。这是一个例子:
const char * what() const throw() { return msg; }
"const throw()" 部分有什么用?我还没有看到方法 name/parameters 和大括号之间有任何内容。
这些是说明符。他们描述了该方法如何在编码环境中工作
const
表示该方法不会修改对象。如果你有一个 class A
,所有方法都可以 运行 在类型为 A
的对象上,但只有 const
方法可以 运行 const A
.
类型的对象
如果您尝试 运行 const 对象上的非 const 方法,或者如果您尝试从 const 方法修改对象,您的代码将不会编译,编译器会告诉您做错了什么。
throw()
表示该方法不会抛出异常。自 C++11 起,它已被 noexcept
取代。
在我看来,在需要时包含此类关键字是一件非常好的事情。它将预期行为的描述添加到代码本身,并有助于在您做错事情时更清楚地了解编译器错误。
它也帮助编译器做一些优化。
我开始学习 C++,方法签名中有一些我以前从未见过的语法。这是一个例子:
const char * what() const throw() { return msg; }
"const throw()" 部分有什么用?我还没有看到方法 name/parameters 和大括号之间有任何内容。
这些是说明符。他们描述了该方法如何在编码环境中工作
const
表示该方法不会修改对象。如果你有一个 class A
,所有方法都可以 运行 在类型为 A
的对象上,但只有 const
方法可以 运行 const A
.
如果您尝试 运行 const 对象上的非 const 方法,或者如果您尝试从 const 方法修改对象,您的代码将不会编译,编译器会告诉您做错了什么。
throw()
表示该方法不会抛出异常。自 C++11 起,它已被 noexcept
取代。
在我看来,在需要时包含此类关键字是一件非常好的事情。它将预期行为的描述添加到代码本身,并有助于在您做错事情时更清楚地了解编译器错误。
它也帮助编译器做一些优化。