问题标签 [function-try-block]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
12724 浏览

c++ - 函数 try 块何时有用?

我想知道程序员何时使用函数 try 块。什么时候有用?

输出:(在ideone

编辑:因为有些人可能认为函数定义的语法不正确(因为语法看起来不熟悉),我不得不说它不是不正确的。它被称为函数尝试块。请参阅 C++ 标准中的 §8.4/1 [dcl.fct.def]。

0 投票
4 回答
5890 浏览

c++ - 函数的 try-catch 语法之间的区别

我最近遇到了这种try-catch用于函数的语法。

两种语法都有效。除了编码风格之外,这些语法之间是否有任何技术差异?其中一种语法在任何方面都优于其他语法吗?

0 投票
5 回答
2909 浏览

c++ - 需要在构造函数中尝试捕获

链接http://gotw.ca/gotw/066.htm指出

道德#1:构造函数-try-block 处理程序只有一个目的——翻译异常。(也许是为了做日志记录或其他一些副作用。)它们对任何其他目的都没有用。

虽然http://www.parashift.com/c++-faq-lite/exceptions.html#faq-17.8

如果构造函数抛出异常,则对象的析构函数不会运行。如果您的对象已经完成了一些需要撤消的操作(例如分配一些内存、打开文件或锁定信号量),则该“需要撤消的操作”必须由对象内部的数据成员记住。

这两个说法不矛盾吗?第一种暗示构造函数中的 try catch 几乎没有用,而第二种暗示需要释放资源。我在这里想念什么?

0 投票
2 回答
2602 浏览

c++ - 函数 try 块的目的是什么?

可能重复:
函数 try 块何时有用?
函数的 try-catch 语法之间的区别

此代码在 class 内int构造对象时引发异常。异常被普通块捕获,代码输出:DogUseResourcesinttry-catch

现在,如果我们将UseResources()构造函数的定义替换为使用 a的定义function try block,如下所示,

输出是一样的

即,最终结果完全相同。

那么, a 的目的是function try block什么?

0 投票
3 回答
191 浏览

c++ - 根据 C++ 社区中一位知识渊博的作者的说法,下面显示的代码不应编译。他错了吗?

根据 Herb Sutter 的说法,下面的代码无法编译。请参阅此站点http://www.gotw.ca/gotw/066.htm,我从中提取了以下文本,涉及function-try-blocks

走向一些道德

顺便说一句,这也意味着构造函数函数try-block的唯一(仅重复)可能用途是转换从基子对象或成员子对象抛出的异常。这是道德#1。接下来,道德#2 说析构函数-try-blocks 完全没用——

“ - 可是等等!” 我听到有人从房间中间打断。“我不同意道德#1。我可以想到构造函数尝试块的另一种可能用途,即释放在初始化列表或构造函数主体中分配的资源!”

对不起,没有。毕竟,请记住,一旦进入构造函数 try-block 的处理程序,构造函数主体中的任何局部变量也已经超出范围,并且可以保证不再存在基子对象或成员对象。你甚至不能参考他们的名字。要么你的对象的部分从未被构建,要么那些被构建的部分已经被销毁。所以你不能清理任何依赖于引用类的基类或成员的东西(无论如何,这就是基类和成员析构函数的用途,对吧?)。

假设这个引用,下面的代码不应该编译,因为在进程运行到子句cat时对象已经被破坏了。catch但它确实如此,至少对于 VSC2008。

0 投票
2 回答
10397 浏览

c++ - 构造函数中奇怪的“候选人需要 1 个参数,提供 0 个参数”

我正在用 C++ 制作一个简单的线程服务器应用程序,事情是,我使用 libconfig++ 来解析我的配置文件。好吧,libconfig 不支持多线程,因此我使用两个包装类来完成“支持”。关键是,其中一个失败了:

从我的 main.cpp 文件中调用时会严重失败:

它说:

这很奇怪,因为我显然在传递一个论点,而且它是一个char *!。

好吧,一如既往,任何帮助将不胜感激。

朱利安。

0 投票
1 回答
45 浏览

java - 在这个例子中,try 块缺少的第三种可能性是什么?

这个方法的 try 块有三种不同的退出可能性;这是其中的两个。

1) try 语句中的代码失败并抛出异常。这可能是由新的 FileWriter 语句引起的 IOException 或由 for 循环中的错误索引值引起的 IndexOutOfBoundsException。

2)一切顺利,try语句正常退出。

有人可以告诉我,可能发生但此处未提及的第三种潜在可能性是什么?

0 投票
2 回答
1586 浏览

c++ - 如何从成员析构函数中捕获异常

我想知道是否(以及如何)可以捕获成员析构函数中抛出的异常。例子:

0 投票
2 回答
80 浏览

c++ - 非构造函数上的函数 try 块有什么缺点吗?

函数 try 块是函数体的一种特殊形式,例如:

主要目的是在构造函数中使用,以便记录任何基类的构造函数抛出的异常。但是,也允许在常规函数中使用它们。

在这方面存在一些(相当老的)问题,询问为什么我们需要它用于常规函数,例如Function try 块,而不是在构造函数中。但是,我的问题更多的是在另一个方向上:我可以在常规函数中使用它来替代常规的 try-block 而不用担心吗?比方说,只是出于审美原因?

我为 C++ 库开发了一个 C 接口,并且需要用 try 块封装每个接口函数以捕获任何异常。因此,我想避免在每个函数中使用额外的花括号块......

只有一件事引起了我的担忧:在答案https://stackoverflow.com/a/11535436/6695750中,davka 引用了 2000 年的一篇文章,声称您无法从对应于功能尝试块。我用 gcc 5.4.0 进行了测试,在那里我可以毫无问题地从 catch-block 返回一个值。这是标准,还是 gcc 的非标准扩展?

0 投票
3 回答
63 浏览

c++ - 函数 try 块是否允许我们解决异常?

因此,我在此链接中阅读了有关功能 try 块的信息。并且有一行描述了普通 try 块和函数 try 块之间的区别,如下所示

与允许您解决异常、抛出新异常或重新抛出现有异常的普通 catch 块不同,对于函数级 try 块,您必须抛出或重新抛出异常

但是后来我尝试编写一个这样的函数try块

输出是

如果函数 try 块不允许我们解决异常,那么为什么catch in main()没有打印出来