gpt4 book ai didi

c++ - 这段代码中的类型转换在哪里?

转载 作者:太空狗 更新时间:2023-10-29 20:40:05 28 4
gpt4 key购买 nike

我的一些代码行从我们的静态代码分析器返回错误。

这个分析器是用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;
}

所以基本上,当某些强制转换(隐式或显式)从指向不同于整数的东西的指针完成时,它只是添加了一个违规。

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

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

st_parametre_embarque只是一个结构,qs_nom字段是一个QString

方法Qstring::contains()确实返回一个 bool 值。

这是代码分析器产生的违规信息:

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

所以我真的看不出哪里可以有 castExpr,而且从 pointer 到 boolean。

最佳答案

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

关于c++ - 这段代码中的类型转换在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25500731/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com