c++ - 为什么在 try 块中访问未声明的变量不会导致 C++ 中的异常
问题描述
我正在修改我的 C++ 技能。在那期间,我遇到了异常处理,我注意到未声明的变量不会导致异常,这对我来说很奇怪。
我期待这个程序以未捕获的异常终止(如果编译器设置正确),因为在 try 块中我试图访问一个未声明的变量。有人可以帮我理解为什么我没有得到(未捕获的)异常吗?
#include <iostream>
using namespace std;
void mightGoWrong() {
bool error = true;
if (error) {
throw 8;
}
}
int main () {
try {
mightGoWrong;
}
catch(int error) {
cout << "The error code is: " << error << endl;
}
cout << "Still running" << endl;
return 0;
}
解决方案
mightGoWrong;
-block 中的-statementtry
不是指变量而是指函数mightGoWrong()
;请注意,您不调用该函数,而只是使用其名称而不将其分配给某物;众所周知mightGoWrong
,它只是一个“无操作”,在编译时可能会产生一些警告,但不会产生错误,并且 - 因为它不会调用该函数 - 它不会在运行时抛出任何东西。
试试看mightGoWrong()
会发生什么。
推荐阅读
- excel - 在选择查询中使用函数将结果存储在 Excel 工作表中
- pyarrow - Pyarrow 非旧版 Parquet 数据集能否读取和写入 Azure Blob?(遗留系统和 Dask 能够)
- java - 获取有条件地加入休眠或将实体设计更改为有条件地获取子项?
- python - 如何使用 Consul Agent CLI 创建新的 KV 条目,但前提是它们尚不存在?
- r - 在 R 中使用 min-max 变换时更好地处理 0?
- multithreading - 在并行化循环中正确使用 private 和 firstprivate (intel fortran)
- openstack - Microstack 托管实例中没有可用的互联网
- regex-greedy - 排除资产正则表达式
- c# - Lock 和 SemaphoreSlim 与 async/await 的使用差异
- tags - 按标签过滤显示所有页面而不是标记页面