编译器错误 C2603

'function':函数中带有构造函数/析构函数的块范围静态对象太多

在 Visual Studio 2015 之前的 Microsoft C++ 编译器版本中,或指定 /Zc:threadSafeInit- 编译器选项时,在外部可见内联函数中可以具有的静态对象数限制为 31。

若要解决此问题,建议采用最新版本的 Microsoft C++ 编译器工具集,或者如果可能,请删除 /Zc:threadSafeInit- 编译器选项。 如果无法执行此操作,请考虑合并静态对象。 如果对象的类型相同,请考虑使用该类型的单个静态数组,并根据需要引用单个成员。

示例

以下示例生成了 C2603 并演示了修复此错误的一种方法:

// C2603.cpp
// Compile by using: cl /W4 /c /Zc:threadSafeInit- C2603.cpp
struct C { C() {} };
extern inline void f1() {
    static C C01, C02, C03, C04, C05, C06, C07, C08, C09, C10;
    static C C11, C12, C13, C14, C15, C16, C17, C18, C19, C20;
    static C C21, C22, C23, C24, C25, C26, C27, C28, C29, C30, C31;
    static C C32;   // C2603 Comment this line out to avoid error
}