有人可以解释一下为什么这会为*a=9;
行提供无法访问的代码警告。
我正在使用VS2015预览和警告级别4
int main(){
int* a = foo();
try{
*a = 5;
}catch(int)
{
*a=9;
}
return 0;
}
答案 0 :(得分:2)
这为*a=9
提供了无法访问的代码警告,因为您的编译器知道try块中的代码永远不会抛出任何类型的异常。所以你的catch块永远不会执行。
当代码容易引发异常时使用try / catch。
答案 1 :(得分:2)
无法访问的原因是因为您的代码片段* a = 5不能抛出异常。它可能会产生访问冲突(例如,如果foo返回nullptr),但不会将其作为C ++异常处理。
如果这是你想要的东西,你可以使用__try / __来捕获访问冲突,但我认为你应该只在特殊情况下使用它。
https://msdn.microsoft.com/en-us/library/s58ftw19%28v=vs.80%29.aspx?f=255&MSPPError=-2147217396