我读到C++ 11引入了属性的概念,例如[[noreturn]],它表明函数不会返回给调用者.
[[noreturn]] void fun()
{
throw std::string("Error!!!");
}
void func()
{
fun();
}
void aTempFunc()
{
try
{
func();
}
catch (std::string &e)
{
std::cout << e << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
通过查看示例,读者可以理解该函数抛出异常并且不会将调用返回给func函数.我有点困惑,了解什么是C++属性以及为什么需要它?程序员如何才能真正利用这些属性?
有人可以详细解释.如果我对属性的理解是错误的,请纠正我.谢谢.
大多数属性是编译器提示、ABI 规范或与目标对象格式(可见性、部分等)相关的要求。
因此,大多数属性不会改变程序的可观察行为:如果删除源代码的所有属性,并且它可以编译,则可以合理地期望生成的程序的行为与使用这些属性编译的程序相同。
但也有一些属性可以显着影响程序的行为或可编译性,例如属性align,即使它们不会极大地改变代码的语义。
实现可以提供自己的属性,只要程序的可观察行为遵循 C++ 语言、 C++ 标准[intro.compliance],这些属性就可以产生任何结果:
一致的实现可以具有扩展(包括附加的库函数),只要它们不改变任何格式良好的程序的行为。根据本文档,需要实施来诊断使用此类格式不正确的扩展的程序。然而,这样做之后,他们可以编译并执行此类程序。