【发布时间】:2023-03-15 06:10:01
【问题描述】:
显然,您可以将变量声明放在 for 循环中:
for (int i = 0; ...
我注意到你也可以在 if 和 switch 语句中做同样的事情:
if ((int i = f()) != 0) ...
switch (int ch = stream.get()) ...
但是当我尝试在 while 循环中做同样的事情时:
while ((int ch = stream.get()) != -1) ...
编译器 (VC++ 9.0) 根本不喜欢它。
这是合规行为吗?有什么原因吗?
编辑:我发现我可以这样做:
while (int ch = stream.get() != -1) ...
但由于优先规则,这被解释为:
while (int ch = (stream.get() != -1)) ...
这不是我想要的。
【问题讨论】:
-
gcc 也不允许我在“if”语句中声明变量,实际上
-
你不是说上一个例子中的 while (int ch = (stream.get() != -1)) 吗?
-
作为解决此问题的一个选项,您可能需要考虑逗号运算符:while (int ch, (ch = stream.get()) != -1) {//do stuff here }
-
@Steve - 是的,当然。相应地进行了编辑。
-
@MarkKCowan 仅适用于
ifandswitch。另见Why no "while statement with initializer"?
标签: c++