clang++ 抱怨变量未初始化:

template<typename TEnum> void func() {
    TEnum enumVar;
    // ...
    if(something()) enumVar = someValue();
    // ...
    if(something()) doSomethingWith(enumVar); // <- clang++ tells me
                                              // enumVar may be uninitialized
}

通常,为避免出现此警告,枚举可以具有Unknown = -1值或类似的值-但不幸的是,此处枚举类型由用户作为typename TEnum传递,因此我不知道它是否包含“空值”。

有什么办法解决这个问题?还是我应该忽略/禁止该警告?

最佳答案

您可以初始化枚举:

template<typename TEnum> void func() {
    TEnum enumVar = TEnum();
    // TEnum enumVar {}; // C++11 way

    // ...
    if(something()) enumVar = someValue();
    // ...
    if(something()) doSomethingWith(enumVar);
}

请注意,该枚举的值0可能是无效值。

08-04 07:32