c++ - C++ 中的 noexcept 如何改变程序集?
问题描述
C++ 中的 noexcept 如何改变程序集?我在godbolt中尝试了一些小功能,但程序集没有改变。
float pi()
//noexcept // no difference
{ return 3.14; }
int main(){
float b{0};
b = pi();
return 0;
}
我正在寻找一个最小的工作示例,我可以在其中看到由于noexcept
.
解决方案
可以构建非常简单的示例,这些示例直接涉及析构函数,而不是自省noexcept
状态:
void a(int);
void b() noexcept;
void c(int i) {
struct A {
int i;
~A() {a(i);}
} a={i};
b();
a.i=1;
}
在这里,允许忽略调用者中noexcept
的初始化,因为析构函数无法观察到它。a
struct B {~B();};
void f();
void g() noexcept {
B b1;
f();
B b2;
}
在这里,允许在被调用者抛出noexcept
时省略所需的帧信息。这取决于(非常常见的)在调用时不展开堆栈的决定。std::terminate
推荐阅读
- c# - 向 InvalidOperationException 行添加更多信息
- android - Android JAVA使用导航组件导航到片段传递数据
- bash - 在一个 shell 脚本中运行多个 shell 脚本的问题
- css - Angular 我如何在 [ngStyle] 和类上应用条件。如果条件为真 [ngStyle] 运行,否则类运行
- javascript - .change() 不起作用,因为页面已经加载
- python - DataFrame中列表中对元素的组合
- vba - 根据组合框选择过滤记录
- ios - 如何在 tableviewcell 中添加手势?
- javascript - 更新嵌入式 Google 趋势
- c# - 如何评估 C# 中以字符串形式给出的数学表达式?