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
typebool
的情况下,如何使此行工作?使用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 };