相关疑难解决方法(0)

如果条件在内部声明变量有什么问题?

也许我生锈了(最近用Python编写).

为什么这不编译?

if ( (int i=f()) == 0)
Run Code Online (Sandbox Code Playgroud)

没有我()周围的int i=f()另一个,更合理的错误i是不是布尔.但这就是为什么我首先想要括号!

我的猜测是使用括号使其成为表达式,并且表达式中不允许使用声明语句.是这样吗?如果是的话,它是C++的语法怪癖之一吗?

顺便说一下,我实际上是想这样做:

if ( (Mymap::iterator it = m.find(name)) != m.end())
    return it->second;
Run Code Online (Sandbox Code Playgroud)

c++ syntax variable-declaration

17
推荐指数
3
解决办法
3006
查看次数

为什么在if条件下烦恼解析?

考虑一下代码:

#include <iostream>

struct Foo
{
    Foo(int){}
    operator bool() const
    {
        return true;
    }
};

int main()
{
    if(Foo foo{42})
    {
        std::cout << "ok\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

它在gcc5下编译得很好.但是,如果我更换线if(Foo foo{42})

if(Foo foo(42))
Run Code Online (Sandbox Code Playgroud)

我得到一个编译时错误:

错误:'foo'之前的预期primary-expression

这里发生了什么?没有令人烦恼的解析imo,为什么使用大括号工作?

c++ most-vexing-parse c++11

3
推荐指数
1
解决办法
269
查看次数