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

yqlxgs2m  于 2023-03-25  发布在  其他
关注(0)|答案(1)|浏览(82)

这在C++中编译

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

    }

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

if (ProfileType()==GI_PROFILE_TYPE && forEdit && 
        !user.AccessGranted(AK_GI_MOD))
        return false;

假设ProfileType()是返回配置文件类型的成员方法。但它不是。它是这样的:

typedef char            ProfileType;

本来应该是

GetType()

这段代码已经默默地编译了很多年(几十年?)并且从来没有真正正常工作过。我之所以发现这一点,是因为我注意到CLion给出了条件总是错误的警告。起初我怀疑警告,然后我怀疑导航到,然后我意识到这个警告实际上是正确的!这些年来,我在这个代码上运行了几个静态分析工具,直到现在都没有发现这个错误。我用gcc-wall构建,它也没有抱怨这个...
我的问题是:这实际上意味着什么:

char()
jfewjypa

jfewjypa1#

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

auto x = MyClass();

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

char() == 0

相关问题