用 C++ 编译但没有明显含义的代码。应用于简单类型(例如 char)的函数调用运算符

Chr*_*olt 4 c++ clion

这在 C++ 中编译

    if (char()=='a') {

    }
Run Code Online (Sandbox Code Playgroud)

我在 CLion 中打开一个非常古老的项目后发现了这一点(是的 Jetbrains!)。有问题的代码试图做到这一点:

    if (ProfileType()==GI_PROFILE_TYPE && forEdit && 
        !user.AccessGranted(AK_GI_MOD))
        return false;
Run Code Online (Sandbox Code Playgroud)

假设 ProfileType() 是返回配置文件类型的成员方法。但事实并非如此。原来是这样的:

typedef char            ProfileType;
Run Code Online (Sandbox Code Playgroud)

本来应该是

GetType()
Run Code Online (Sandbox Code Playgroud)

这段代码已经默默地编译了多年(几十年?),但从未真正正常工作过。我发现这个只是因为我注意到 CLion 发出警告,条件总是错误的。起初我怀疑这个警告,然后我怀疑导航到,然后我意识到这个警告实际上是正确的!多年来我已经在这段代码上运行了多个静态分析工具,但到目前为止还没有发现这个错误。我用 gcc -Wall 构建,它也没有抱怨这一点......

我的问题是:这实际上意味着什么:

char()
Run Code Online (Sandbox Code Playgroud)

Dan*_*ani 5

这是默认构造函数的语法,例如

auto x = MyClass();
Run Code Online (Sandbox Code Playgroud)

将调用MyClass的默认构造函数。对于像这样的原始类型char,它会将它们初始化为零,例如

char() == 0
Run Code Online (Sandbox Code Playgroud)