为什么不A a(())不工作?

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

A a(B()); //declares a function

虽然这对大多数人来说直观地看起来是一个a类型对象的声明A,将一个临时B对象作为构造函数参数,但实际上它是一个a返回函数的函数的声明A,将指针指向返回的函数B并且它本身不带参数。

A a(); //declares a function

也属于同一类别,因为它不是一个对象,而是声明一个函数。现在,在第一种情况下,这个问题的常用解决方法是在B()该处添加一组额外的括号/括号,因为编译器会将其解释为对象的声明

A a((B())); //declares an object

但是,在第二种情况下,这样做会导致编译错误

A a(()); //compile error

我的问题是,为什么?

杀马特杀马特提问于
萌萌呆想玩游戏却不知道这么开机的吃瓜少年。回答于
已采纳

没有完美的答案,只是因为它没有被C++语言定义为有效的语法......所以根据语言的定义是如此。

如果有一个表达式,那么它是有效的。例如:

 ((0));//compiles

红月努力的程序喵回答于

这个问题的最终解决方案是转移到C+11统一初始化语法。

A a{};

扫码关注云+社区