C++ 如何使用窄化转换?

C++ 如何使用窄化转换?,c++,C++,pdigit和bdigitplace都属于int类型,需要使用数字不必是布尔值,但为了美观起见,我希望它是布尔值 该行在Visual Studio中返回错误C2397:“从‘int’到‘bool’的转换需要缩小转换范围” 在仍然使用条件运算符并保持digittypebool的情况下,如何使此行工作?使用true和false而不是1和0它不工作,因为使用大括号缩小转换范围不允许将int转换为bool。阅读以下内容,可能会有所帮助: 缩小转换是一种隐式转换 -从浮点类型到整数类型,或 -从长双到 d

pdigit
bdigitplace
都属于
int
类型,需要使用<代码>数字不必是布尔值,但为了美观起见,我希望它是布尔值

该行在Visual Studio中返回错误C2397:“从‘int’到‘bool’的转换需要缩小转换范围”


在仍然使用条件运算符并保持
digit
type
bool
的情况下,如何使此行工作?

使用true和false而不是1和0

它不工作,因为使用大括号缩小转换范围不允许将int转换为bool。阅读以下内容,可能会有所帮助:

缩小转换是一种隐式转换

-从浮点类型到整数类型,或

-从长双到 double或float,或从double到float,除非源是 常量表达式,转换后的实际值在 可以表示的值的范围(即使不能 准确地表示),或

-从整数类型或非范围 枚举类型转换为浮点类型,除非源是 一个常量表达式和转换后的实际值将匹配 转换为目标类型,并在 转换回原始类型,或

-从整数类型或 未作用域枚举类型转换为不能表示所有类型的整数类型 原始类型的值,除非源是常量 表达式和转换后的实际值将适合 目标类型,并将在转换回时生成原始值 原始类型。如上所述,此类转换不适用 在列表初始化中允许在顶级


只需使用true或false而不是1和0即可解决此问题。

取出文本
?1:0
“仍在使用条件运算符”?好吧,好吧<代码>布尔数字{((1?2:3),pdigit>=bdigitplace)}为什么要继续使用条件运算符?您是否希望您的代码比必要的代码更难阅读?使用
bool数字{pdigit>=bdigitplace}如MM所示。就个人而言,在这种情况下,我甚至不使用列表初始化,而是编写
bool digit=pdigit>=bdigitplace因为条件运算符不难读取。然而,这
bool digit=pdigit>=bdigitplace我没有想到,很好。你是上帝。你有没有可能详细解释一下为什么会这样?
bool digit{ (pdigit >= bdigitplace) ? 1 : 0 };