函数的属性是什么意思
What is meant by an attribute of a function?
c++ 11语法是什么意思?
[[ noreturn ]] void f () {
throw "error";
}
c++标准工作草案n3797规定,
函数的第一个声明必须指定noreturn属性,如果该函数的任何声明指定了noreturn属性。中的
noreturn
属性声明函数声明一个翻译单元和同一个函数,但不使用在另一个翻译单元中Noreturn属性,则程序是不规范的;不需要诊断。
函数的属性是什么意思?
函数由其名称、返回类型、形式参数列表及其类型定义。这些项构成了函数的"接口":它们对函数的调用者很重要,因为它们定义了调用函数的方式。
另一方面,属性提供了一种方法,告诉编译器关于函数的额外信息,这些信息不会改变函数的接口。当编译器知道函数是
时- 中断处理程序,或
- 纯函数(即没有副作用或引用任何类型的状态),或
- 返回两次的函数(类似于
fork
),或者 - 一个永远不会返回等的函数
编译器可以更好地优化代码,并提供额外的警告/屏蔽不必要的警告。
例如,如果你写
main() {
f();
g();
}
f()
被标记为noreturn
,编译器将发出g()
不可达的警告。属性是c++ 11中的一个新特性。编译器供应商长期以来一直提供特定于供应商的扩展,允许您以某种方式注释函数,但现在有了一种标准机制。标准没有指定很多实际属性(只有noreturn
和carries_dependency
),但是用于注释函数的机制现在至少是标准化了。
也就是说,noreturn
属性具有重要的语义:如果用该属性声明的函数确实返回,则程序具有未定义的行为。如果编译器知道你正在从一个noreturn函数返回,那么它们应该(但不是必须)产生一个诊断。该属性对于优化和更好的诊断是有价值的。
[[noreturn]]
属性为静默警告。
#include <stdexcept>
[[noreturn]] void report_error()
{
throw std::runtime_error("error");
}
int f(int x)
{
if (x > 0) {
return x;
}
report_error();
}
int main()
{
f(1);
}
如果不使用[[noreturn]]
,编译器在f()
: warning: control may reach end of non-void function
中输出警告。
来自GCC的文档"noreturn关键字告诉编译器假定函数不能返回。然后,它可以进行优化,而不必考虑如果致命的情况再次发生会发生什么。这使得代码稍微好一些。更重要的是,它有助于避免对未初始化变量的虚假警告。"
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 当我们说在执行程序时将操作系统的控制权传递给main()函数时,我们的意思是什么
- 这句话在c++中的意思是什么
- 这个typedef的意思是什么
- 这句话的意思是什么
- 意思是什么
- 这个句法的意思是什么?