相关疑难解决方法(0)

最令人烦恼的解析的目的是什么?

维基百科上,我发现了这个:

A a( A() );
Run Code Online (Sandbox Code Playgroud)

[这]可以消除歧义

  1. class [ A] 的变量定义,取一个类[ A]或的匿名实例

  2. 函数的函数声明,它返回一个类型为[ A] 的对象,并获取一个(未命名的)参数,该参数是一个返回类型[ A](并且不进行输入)的函数.

大多数程序员都期望第一个,但C++标准要求它被解释为第二个.

但为什么?如果大多数C++社区都期望以前的行为,为什么不把它作为标准呢?此外,如果考虑解析歧义,则上述语法是一致的.

有人可以赐教吗?为什么标准要求这个?

c++

16
推荐指数
4
解决办法
877
查看次数

最烦人的解析

我在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) );意思?到目前为止,我只看到了如下函数声明:

  1. Foo f( int );

  2. Foo f( int x );

是一样的Foo f( int x );吗?

c++ most-vexing-parse

8
推荐指数
2
解决办法
1947
查看次数

标签 统计

c++ ×2

most-vexing-parse ×1