我想创建一个if
声明,分配和检查变量的地方。如果变量的值可以接受,我想在if
体内使用它。这是我认为自己可以做到的示例:
if ((int result = Foo()) != 0) {
// use result
}
我假设Foo()
返回了一些值,该值已分配给result
赋值运算符=
,并由赋值运算符返回,最后对照0
in进行检查!= 0
。不幸的是,这会导致编译错误:
main.cpp:31:10: error: expected primary-expression before ‘int’
if ((int i = Foo()) != 0)
^
main.cpp:31:10: error: expected ‘)’ before ‘int’
为什么会发生此错误?以及有什么方法可以解决它?
你的推理似乎是基于以下假设:=
在
if ((int result = Foo()) != 0)
是一个赋值运算符,它int result = Foo()
是“表达式”,其结果为某值。
这不是真的。
该int result = Foo()
部分不是C ++中的表达式。这是带有初始化程序的声明。在=
初始化语法是不是在所有的赋值运算符。它只是一个语法元素,巧合地使用与赋值运算符相同的字符。该int result = Foo()
不是一个表达式,它并不“评估”任何结果。
因为如果以上,支持类似
if (int result = Foo())
需要特殊处理,这严重限制了此语法的灵活性。您在代码中尝试的内容超出了特殊处理所允许的范围。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句