【发布时间】:2021-11-17 18:05:00
【问题描述】:
根据 C++ ISO:
条件的值是一个初始化声明 switch 语句以外的语句是声明的值 变量根据上下文转换为 bool (7.3)。如果该转换是 格式不正确,程序格式不正确。条件的值 是 switch 语句中的初始化声明是值 声明的变量,如果它具有整数或枚举类型,或 该变量隐式转换为整数或枚举类型 否则。作为表达式的条件的值是 表达式,上下文转换为 bool 用于 switch 以外的语句;如果该转换格式不正确, 程序格式不正确。
以下引用来自上述第 7.3 节:
某些语言结构要求将表达式转换为 一个布尔值。表示出现在这种上下文中的表达式 e 被上下文转换为 bool 并且当且仅当 声明 bool t(e);是良好的,对于一些发明的临时 变量 t (9.4)。
基于这两个,我知道switch-statement 并不总是在具有适当类型的情况下进行转换。否则if-statement 看起来总是执行这样的转换,即使我做了类似if (true){} 的事情,我知道true 的值会被转换。那么,会发生这种情况吗?代码:if(true){} 会将 true 转换为布尔值?(即使 true 已经是布尔值)
【问题讨论】:
-
任何值都可以转换成自己的类型。
-
那么,bool true 被转换为 bool,?
-
我不明白。 “
if(true){}会将true转换为布尔值?” - 像true这样的bool需要什么样的转换才能变成bool? -
你读的太多了。这只是“我们会在某些条件下使类型适合”的标准。
-
“出现在这种上下文中的表达式 e 据说在上下文中转换为 bool”(强调我的)。这并不是说 is 转换了,它是对标准短语“contextually converted”的解释。
标签: c++ if-statement switch-statement language-lawyer