return (enum)(a!=0)和 return (enum)a的区别
时间: 2024-02-03 10:03:07 浏览: 18
这两段代码的区别在于返回值的类型不同。
1. `return (enum)(a != 0)`:
- 这段代码会先判断变量 a 是否不等于零。
- 如果 a 不等于零,`(a != 0)` 的结果是真,表示逻辑条件为真。
- `(enum)(a != 0)` 将逻辑条件的结果转换为枚举类型。
- 最终返回转换后的枚举值,表示逻辑条件为真的情况。
2. `return (enum)a`:
- 这段代码直接将变量 a 转换为枚举类型。
- 如果 a 的值与枚举类型定义的常量值匹配,则返回对应的枚举值。
- 如果 a 的值与枚举类型定义的常量值不匹配,则可能会引发编译错误或运行时异常,具体取决于所使用的编程语言和枚举类型的定义。
总结:
- `return (enum)(a != 0)` 返回的是根据逻辑条件结果转换后的枚举值。
- `return (enum)a` 返回的是将变量 a 直接转换为枚举类型后的值,如果匹配则返回对应的枚举值。
相关问题
如果您的结构体中包含 QMap<自定义枚举类型, QMap<自定义枚举类型, 子结构体>>,则需要分别为该结构体、子结构体以及自定义枚举类型定义等号和不等号运算符。 先来看自定义枚举类型的重载运算符。假设该枚举类型的名称为 MyEnum,需要按照以下方式定义 == 和 != 运算符: 复制 enum class MyEnum { A, B, C }; bool operator==(const MyEnum& lhs, const MyEnum& rhs) { return static_cast<int>(lhs) == static_cast<int>(rhs); } bool operator!=(const MyEnum& lhs, const MyEnum& rhs) { return !(lhs == rhs); } 在上述代码中,我们将 MyEnum 转换为 int 类型进行比较,因为 enum class 默认没有定义等号和不等号运算符。 接下来是子结构体的重载运算符,假设子结构体的名称为 SubStruct,包含两个整数 x 和 y,则需要按照以下方式定义 == 和 != 运算符: 复制 struct SubStruct { int x; int y; bool operator==(const SubStruct& other) const { return x == other.x && y == other.y; } bool operator!=(const SubStruct& other) const { return !(*this == other); } }; 最后是包含 QMap<自定义枚举类型, QMap<自定义枚举类型, SubStruct>> 的结构体的重载运算符,假设该结构体的名称为 MyStruct,需要按照以下方式定义 == 和 != 运算符: 复制 struct MyStruct { QMap<MyEnum, QMap<MyEnum, SubStruct>> aa; bool operator==(const MyStruct& other) const { return aa == other.aa; } bool operator!=(const MyStruct& other) const { return !(*this == other); } }; 在上述代码中,我们直接利用了 QMap 的默认等号运算符,因为其已经对子结构体进行了深度比较。因此,我们只需要为 MyStruct 定义等号和不等号运算符,将其与其他 MyStruct 对象进行比较即可。,你的这种方法系统会报错
& lhs, const MyEnum& rhs) {
return static_cast<int>(lhs) == static_cast<int>(rhs);
}
bool operator!=(const MyEnum& lhs, const MyEnum& rhs) {
return !(lhs == rhs);
}
这样就可以对自定义枚举类型进行 == 和 != 运算符的重载了。接下来是子结构体的重载运算符定义。假设该子结构体的名称为 MyStruct,包含两个成员变量:一个是自定义枚举类型 MyEnum,另一个是 QString 类型的字符串。需要按照以下方式定义 == 和 != 运算符:
复制 struct MyStruct {
MyEnum enumVar;
QString stringVar;
bool operator==(const MyStruct& other) const {
return (enumVar == other.enumVar) && (stringVar == other.stringVar);
}
bool operator!=(const MyStruct& other) const {
return !(*this == other);
}
};
最后是包含 QMap<自定义枚举类型, QMap<自定义枚举类型, 子结构体>> 的结构体的重载运算符定义。假设该结构体的名称为 MyStructWithMap,需要按照以下方式定义 == 和 != 运算符:
复制 struct MyStructWithMap {
QMap<MyEnum, QMap<MyEnum, MyStruct>> mapVar;
bool operator==(const MyStructWithMap& other) const {
return mapVar == other.mapVar;
}
bool operator!=(const MyStructWithMap& other) const {
return !(*this == other);
}
};
简化java代码: List<RegionManageVo> addressList = new ArrayList<>() ; if( dataType!= MyEnums.REGION_MANAGE_VO___DATA_TYPE_ENUM.镇乡档案.toCode() ){ addressList = regionManageService.gainTownCountryAddress(query.getWorkflowOrderId()) ; }else if( dataType!= MyEnums.REGION_MANAGE_VO___DATA_TYPE_ENUM.村庄档案.toCode() ){ addressList = regionManageService.gainVillageAddress(query.getWorkflowOrderId()) ; } if( addressList != null && addressList.size() > 0 ){ if( addressList.size() == 1 ){ RegionManageVo vo = addressList.get(0) ; if( vo!=null ){ String address = vo.getDetailAddress() ; List<RegionManageVo> ifHasAgreedList = new ArrayList<>() ; if( dataType!= MyEnums.REGION_MANAGE_VO___DATA_TYPE_ENUM.镇乡档案.toCode() ){ ifHasAgreedList = regionManageService.gainTownCountryListAgreed( address , MyEnums.REGION_MANAGE_VO_VERIFY_STATUS_ENUM.通过.toCode(), dataType ) ; }else if( dataType!= MyEnums.REGION_MANAGE_VO___DATA_TYPE_ENUM.村庄档案.toCode() ){ ifHasAgreedList = regionManageService.gainVillageListAgreed( address , MyEnums.REGION_MANAGE_VO_VERIFY_STATUS_ENUM.通过.toCode(), dataType ) ; } if(ifHasAgreedList!=null && ifHasAgreedList.size() >0 ){ return ResultVoUtil.success(true) ; } } }else{ log.error("checkIfHasSamePassedRegion -- > should not has this data twice . 工作流订单ID:{} ",query.getWorkflowOrderId()) ; return ResultVoUtil.success(true) ; } }
List<RegionManageVo> addressList = new ArrayList<>();
if(dataType != MyEnums.REGION_MANAGE_VO___DATA_TYPE_ENUM.镇乡档案.toCode()) {
addressList = regionManageService.gainTownCountryAddress(query.getWorkflowOrderId());
} else if(dataType != MyEnums.REGION_MANAGE_VO___DATA_TYPE_ENUM.村庄档案.toCode()) {
addressList = regionManageService.gainVillageAddress(query.getWorkflowOrderId());
}
if(!addressList.isEmpty()) {
RegionManageVo vo = addressList.get(0);
if(vo != null) {
String address = vo.getDetailAddress();
List<RegionManageVo> ifHasAgreedList = new ArrayList<>();
if(dataType != MyEnums.REGION_MANAGE_VO___DATA_TYPE_ENUM.镇乡档案.toCode()) {
ifHasAgreedList = regionManageService.gainTownCountryListAgreed(address, MyEnums.REGION_MANAGE_VO_VERIFY_STATUS_ENUM.通过.toCode(), dataType);
} else if(dataType != MyEnums.REGION_MANAGE_VO___DATA_TYPE_ENUM.村庄档案.toCode()) {
ifHasAgreedList = regionManageService.gainVillageListAgreed(address, MyEnums.REGION_MANAGE_VO_VERIFY_STATUS_ENUM.通过.toCode(), dataType);
}
if(!ifHasAgreedList.isEmpty()) {
return ResultVoUtil.success(true);
}
} else {
log.error("checkIfHasSamePassedRegion -- > should not has this data twice . 工作流订单ID:{} ", query.getWorkflowOrderId());
return ResultVoUtil.success(true);
}
}