此代码中的演员阵容在哪里?

Mar*_*c-O 3 c++ qt casting clang

我有一些代码行从静态代码分析器返回错误.

该分析器使用clang编程,违反规则的源代码非常简单:

// For each cast expression in the code 
bool VisitCastExpr(CastExpr *castExpr){
    string errorMsg;
    string CastName = castExpr->getCastKindName();
    // If cast is from pointer to everything different than an integer, add violation 
    if((castExpr->getCastKind() == CK_MemberPointerToBoolean)||(castExpr->getCastKind() == CK_PointerToBoolean)||(castExpr->getCastKind() == CK_CPointerToObjCPointerCast)||(castExpr->getCastKind() == CK_BlockPointerToObjCPointerCast)||(castExpr->getCastKind() == CK_AnyPointerToBlockPointerCast)){
        errorMsg = "Forbidden cast "+CastName+" from pointer to non-integer type";
        addViolation(castExpr,this,errorMsg);
    }
    return true; 
}
Run Code Online (Sandbox Code Playgroud)

所以基本上,它只是在从指针到不同于整数的某些东西进行某些强制转换(隐式或显式)时添加违规.

以下是返回错误的表达式之一:

if(st_parametre_embarque.qs_nom.contains("PAR")){.

st_parametre_embarque只是一个结构,而这个领域qs_nom是一个QString.

方法Qstring :: contains()确实返回一个布尔值.

以下是代码分析器产生的违规消息:

禁止从指针转换为非整数类型的PointerToBoolean

所以我真的没有看到可能存在的地方castExpr,而且从指针到布尔值.

aec*_*ley 5

在Qt5之前,QString::contains退回了一个QBool,而不是一个bool.该值必须以某种方式转换为bool,静态分析器已经确定它是隐式转换.尝试与布尔常量(即调用operator==(QBool, bool))进行显式比较,并查看静态分析器是否遵循它.