也许我生锈了(最近用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) 考虑一下代码:
#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,为什么使用大括号工作?