也许我已经生疏了(最近一直在用Python编写)。
为什么这不能编译?
if ( (int i=f()) == 0)
没有()
周围的int i=f()
我得到另一个更合理的错误i
不是布尔值。但这就是为什么我首先想要括号!
我的猜测是,使用括号将其放入表达式中,并且表达式中不允许使用声明语句。是这样吗?如果是的话,这是 C++ 的语法怪癖之一吗?
顺便说一句,我实际上是想这样做:
if ( (Mymap::iterator it = m.find(name)) != m.end())
return it->second;
您可以在中声明一个变量if
C++ 中的语句,但仅限于直接初始化,并且需要转换为布尔值:
if (int i = f()) { ... }
C++ 没有任何可以被描述为“声明表达式”的东西,即声明变量的 [sub-] 表达式。
实际上,我只是查了一下标准中的条款,根据 6.4 [stmt.select] 第 1 段,这两种形式的初始化都支持:
...
condition:
expression
attribute-specifier-seqopt decl-specifier-seq declarator = initializer-clause
attribute-specifier-seqopt decl-specifier-seq declarator braced-init-list
...
也就是说,也可以这样写:
if (int i{f()}) { ... }
显然,这只适用于 C++2011,因为 C++2003 没有大括号初始化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)