【发布时间】:2012-06-26 23:06:20
【问题描述】:
Bjarne 建议使用 if 中的条件作为范围限制。特别是这个例子。
if ( double d = fd() ) {
// d in scope here...
}
我很好奇如何从真/假的意义上解释声明。
- 这是一个声明
- 这是一个双重的。
编辑: 它在 6.3.2.1 C++ 编程语言中作为推荐。
Edit2:templatetypedefs 对指针的建议,特别是动态转换,可能会给 Bjarnes 建议提供洞察力。
SteveJessop 告诉我: - 条件不是表达式,它也可以是声明,使用的值是正在评估的值。
【问题讨论】:
-
this question 的答案也将回答您的问题。
-
我刚刚阅读了您正在谈论的部分,并感觉讨论更多是关于将其用作范围限制(并获得紧凑代码的额外好处)并且没有与特定的数据类型有很大关系。我认为他本可以将
double替换为int,并且仍然能够传达他想要传达的信息。我就是这么读的。 -
@jedwards 是的,但是使用 double 是在乞求答案。 int 声明仍然是一个值得回答的异常情况。
-
@Captain Giraffe:声明不是表达式。
if语句的语法是“if (condition) statement”,条件的语法是“expression”或“type-specifier-seq declarator = assignment-expression”。double d = fd()是后者。请参阅标准中的[stmt.select]。 -
@Mike:不幸的是,编写类似代码的人发明了 C++ 而你没有,所以我认为你的偏好不会胜出。也就是说,Stroustrup 将代码 sn-ps 以斜体而不是像几乎其他所有人一样使用固定宽度。所以他并没有赢得所有人。
标签: c++ if-statement type-conversion scoping variable-declaration