在维基百科上,我发现了这个:
A a( A() );
Run Code Online (Sandbox Code Playgroud)
[这]可以消除歧义
class [
A] 的变量定义,取一个类[A]或的匿名实例函数的函数声明,它返回一个类型为[
A] 的对象,并获取一个(未命名的)参数,该参数是一个返回类型[A](并且不进行输入)的函数.大多数程序员都期望第一个,但C++标准要求它被解释为第二个.
但为什么?如果大多数C++社区都期望以前的行为,为什么不把它作为标准呢?此外,如果不考虑解析歧义,则上述语法是一致的.
有人可以赐教吗?为什么标准要求这个?
我在Cpp Quiz 上看到了一个代码[问题 #38]
#include <iostream>
struct Foo
{
Foo(int d) : x(d) {}
int x;
};
int main()
{
double x = 3.14;
Foo f( int(x) );
std::cout << f.x << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
据说这段代码格式不正确,因为Foo f( int(x) );将被视为函数声明而不是 type 的对象声明Foo。
据我所知,这是“最烦人的解析”的一个实例。我的问题是int(x)语句中的这种语法是什么Foo f( int(x) );意思?到目前为止,我只看到了如下函数声明:
Foo f( int ); 和
Foo f( int x );
是一样的Foo f( int x );吗?