编译器警告(等级 4)C4843

type1”:对数组或函数类型的引用的异常处理程序不可访问,请改用“type2

注解

对数组或函数类型的引用的处理程序从不匹配任意异常对象。 从 Visual Studio 2017 版本 15.5 开始,编译器遵循此规则并引发级别 4 警告。 使用 /Zc:strictStrings 时,它也不再将 char*wchar_t* 的处理程序与字符串文本相匹配。

此警告是 Visual Studio 2017 版本 15.5 中的新增功能。 有关如何按编译器版本禁用警告的信息,请参阅由编译器版本引发的编译器警告

示例

此示例显示了导致 C4843 的多个 catch 语句:

// C4843_warning.cpp
// compile by using: cl /EHsc /W4 C4843_warning.cpp
int main()
{
    try {
        throw "";
    }
    catch (int (&)[1]) {} // C4843 (This should always be dead code.)
    catch (void (&)()) {} // C4843 (This should always be dead code.)
    catch (char*) {} // This should not be a match under /Zc:strictStrings
}

编译器生成以下警告:

warning C4843: 'int (&)[1]': An exception handler of reference to array or function type is unreachable, use 'int*' instead
warning C4843: 'void (__cdecl &)(void)': An exception handler of reference to array or function type is unreachable, use 'void (__cdecl*)(void)' instead

以下代码可避免此错误:

// C4843_fixed.cpp
// compile by using: cl /EHsc /W4 C4843_fixed.cpp
int main()
{
    try {
        throw "";
    }
    catch (int (*)[1]) {}
}