我使用clang分析器来检查我的C++代码是否存在错误和错误。我有以下结构:C++如何处理try catch块中的赋值?
#include <cstdlib>
#include <iostream>
double
somethingThatMayThrow() throw (std::exception)
{
if(rand() % 2) {
throw std::exception();
}
return 5.0;
}
int
main()
{
double value = 2.0;
try {
value = somethingThatMayThrow();
} catch(const std::exception&) {
std::cout << "oops" << std::endl;
}
double someOtherValue = value + 1.0;
std::cout << someOtherValue << std::endl;
return 0;
}
分析仪现在抱怨变量value
的初始值是从来没有读过。然而,当且仅当在try块中存在异常时,显然该值用于最后一行。这种理解是否正确,并且我正在分析器中查找错误?或者我在这里错过了什么?
该标准如何定义此行为?如果右侧抛出,分配的左侧会发生什么?
的屏幕截图示出了如下的实际代码,所述分析器抱怨,其具有相同的结构,我的例子以上:
我认为这个消息意味着在'double value = someValue;'中,在将它重新分配给'somethingThatMayThrow()'之前,你永远不会读取'value'的值。 – Borgleader
“该值用于最后一行”,否,不在您提供的代码和图片中。给出一个**最小但完整的例子。作为文本。 –
@ Cheersandhth.-Alf他做到了。 – Shoe