我使用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