gpt4 book ai didi

c++ - 格式化输出运算符标准 iostream 对象可以抛出什么样的异常?

转载 作者:行者123 更新时间:2023-11-30 04:00:10 24 4
gpt4 key购买 nike

(1) 给定一个任意变量 x基本(可能是 CV 合格)类型的 X , 和

(2) 格式化输出语句形式为

outputStream << x;

哪里outputStream是任何标准 <iostream>输出流(coutcerrclogwcoutwcerrwclog):

C++11 标准对语句 (2) 可能抛出的异常类型有什么限制?假设我想写得尽可能精确 catch尽可能匹配,不要局限于捕捉 std::exception .

例如,我还应该测试 std::bad_alloc 吗?或 <stdexcept> 的任何其他异常(exception)情况,或者所有异常(exception)都限于 ios_base::failure

try {
outputStream << x;
} catch (/* ??? */) { /* ... */ }
} catch (/* ??? */) { /* ... */ }
// ... ???

PS:请让这成为一个与工具链和平台无关的严格 C++11 问题。评论如“你为什么要写这样的代码?”没有建设性。我只想知道在最坏的符合标准的情况下会出现什么样的异常。谢谢! :)

最佳答案

来自 here

Exception safety Basic guarantee: if an exception is thrown, the object is in a valid state. It throws an exception of member type failure if the resulting error state flag is not goodbit and member exceptions was set to throw for that state. Any exception thrown by an internal operation is caught and handled by the function, setting badbit. If badbit was set on the last call to exceptions, the function rethrows the caught exception.

所以它只会抛出failure 异常,如果你设置了exceptions 允许的话。如果您允许,它也只会抛出底层异常。

如果您想要细粒度控制,请阅读 exception masks .

关于c++ - 格式化输出运算符标准 iostream 对象可以抛出什么样的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26485723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com