Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们应该使用标准库中的异常类型吗? C++标准库定义了一些异常类型,如:代码> STD::异常< /代码>,代码> STD::BADYOLLC/,和 STD::LogICHOLLUTION/COD>。我们是否应该或允许在自己的代码中使用它们_C++_Exception_Standard Library - Fatal编程技术网

我们应该使用标准库中的异常类型吗? C++标准库定义了一些异常类型,如:代码> STD::异常< /代码>,代码> STD::BADYOLLC/,和 STD::LogICHOLLUTION/COD>。我们是否应该或允许在自己的代码中使用它们

我们应该使用标准库中的异常类型吗? C++标准库定义了一些异常类型,如:代码> STD::异常< /代码>,代码> STD::BADYOLLC/,和 STD::LogICHOLLUTION/COD>。我们是否应该或允许在自己的代码中使用它们,c++,exception,standard-library,C++,Exception,Standard Library,让我们举一个具体的例子。我们定义了一个类型数组,它包含固定数量的ints,并在“超出范围”访问上抛出std::out\u of\u range。它有一个成员函数Array::operator[](size\u ti),定义如下: int& Array::operator[](size_t i) { if (i >= size) throw std::out_of_range({ "out of range" }); return array[i];

让我们举一个具体的例子。我们定义了一个类型
数组
,它包含固定数量的
int
s,并在“超出范围”访问上抛出
std::out\u of\u range
。它有一个成员函数
Array::operator[](size\u ti)
,定义如下:

int& Array::operator[](size_t i) {
    if (i >= size)
        throw std::out_of_range({ "out of range" });

    return array[i];
}
我认为,当然,我们可以使用它们(标准并没有真正禁止),但它看起来像是断章取义。依我看,它类似于一个常数

const unsigned int percentFactor = 100;
用于内存分配的:

char* ptr = new char[percentFactor];
percentFactor
旨在将
浮点值相乘,以获得整数百分比结果。如果与一起用于分配100个字符,则会给出预期结果,但两个LOC在其他方面完全不相关。例外情况也是如此。如果
std::out_of_range
仅用于标准库中,并且我会在自己的代码中使用它,那么异常机制本身可以工作,但在其他方面它是无关的


现在,我是否应该在我自己的程序/库/API中使用它们?

答案是

std::超出范围
正是为此而设计的

您的所有异常都应该来自
,或者来自其中的异常类

编辑:

扩展一点。。。投掷

  • std::logic_error
    (或从中派生的内容)表示程序本身不正确(用户代码试图执行超出设计参数的操作)

  • std::runtime_error
    (或其子类)意味着所尝试的是合法的,但此时不可能(例如,因为文件丢失或其他一些运行时问题)


这是只有在
std::out\u超出范围的情况下才能使用,还是我可以在没有进一步研究的情况下使用其中任何一个呢?@cad请参见上面关于使用哪一个以及何时使用的简单解释。我已经多次阅读了这个问题,但仍然不明白标准异常类与常量整数和动态内存有什么关系分配。@ChristianHackl
percentFactor
旨在乘以一个
float
/
double
,以获得一个整数百分比。在我的示例中,它用于内存分配,这与百分比计算完全无关。想象一下,一个人想要分配100个
char
s并为其使用
percentFactor
。这给出了正确的结果,但实际上是不相关的。与
std::out_of_range
相同。如果它只用于标准库,但我用于我自己的程序,它会工作,但它们完全无关。诚然,这可能不是一个例子。:-)@ChristianHackl更好的例子:想象一下,如果执行了“超出范围”的访问,就会抛出一个
std::bad_alloc
。异常机制本身可能工作得很好,但实际上与“超出范围”的访问无关。