gpt4 book ai didi

c++ - 是否可以抛出 C++ 标准库中定义的异常?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:34:06 26 4
gpt4 key购买 nike

我想知道是否可以抛出 C++ 标准库中定义的异常,而不是创建我自己的类。例如,让我们考虑以下将一个字符串作为参数的(愚蠢的)函数:

#include <stdexcept> 
#include <iostream>
#include <string>

bool useless_function(const std::string& str) {
if (str == "true")
return true;

else if (str == "false")
return false;

else
throw std::invalid_argument("Expected argument of either true or false");
}

当然,我们可以这样做:

int main(int argc, const char** argv) {
try {
const bool check = useless_function("not true");
}

catch (std::invalid_argument& error) {
std::cerr << error.what() << '\n';
}

return 0;
}

我读了here std::stoi 函数族在收到无效参数时抛出 std::invalid_exception 异常;这就是上述想法的来源。

最佳答案

是的,为您自己的目的使用标准异常类是完全没问题的。如果它们很适合您的情况,请继续(但当/如果没有标准类很适合时,请不要犹豫定义您自己的类)。

另请注意,您可以从标准类派生,因此如果您可以添加标准类中不存在的显着更高的精度或新行为,您可能仍希望将其用作基类。

更好的问题 (IMO) 是什么时候定义您自己的异常类(至少不是从标准类派生的)才有意义。这里一个明显的候选者是,如果你想支持像 what() 这样的东西,它返回一个像 UTF-16 或 UTF-32 编码的字符串,所以 "stock""std::exception "不会提供太多(如果有的话)实用程序,而且您几乎无法从头开始。

关于c++ - 是否可以抛出 C++ 标准库中定义的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31395645/

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