c++ - 为什么下面的代码在C++中是非法的

标签 c++

<分区>

我想创建一个 if,其中声明、分配和检查变量。如果变量的值是可接受的,我想在 if 主体中使用它。以下是我认为我可以如何做到这一点的示例:

if ((int result = Foo()) != 0) {
    // use result
}

我假设 Foo() 返回一些值,该值被分配给 result,并由赋值运算符 = 返回,最后检查针对 != 0 中的 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;

if ((result = Foo()) != 0) {
    // use result
}

关于c++ - 为什么下面的代码在C++中是非法的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30358097/

相关文章:

c++ - 重叠的 QGraphicsItem-s 悬停事件

c++ - 绑定(bind)到 Windows 2008 Server 中的环回适配器

C++ 和 mktime : 26/6/1943 and 27/6/1943 are the same day

c++ - 如何监控过程生命周期

c++ - 如何测试 std::thread 是否被移出?

c++ - ->first/second 到一个空的 map 迭代器开始

c++ - 不能用通告包含转发声明

c++ - 如何在启动时将 gdbserver 附加到进程?

c++ - 从上方找到 vector 中最接近值的优雅方法

c++ - 虚基类在多级继承中有什么用?