为什么`file_pointer {0}`编译而不能`file_pointer(0)`编译?

时间:2020-05-19 19:43:55

标签: c++ initialization

我已经浏览了有关初始化程序列表和成员初始化的SO,但没有找到针对此特定问题的答案。如果确实是重复的,请原谅。

我正在浏览C ++源代码,其中结构的成员FILE*的初始化如下:

struct Something {
    FILE* d_fp{0};
}

我已经对其进行了谷歌搜索,并且我了解使用初始化列表构造函数进行初始化的概念。

我知道,如果在实例化类型上不存在专用的initializer-list构造函数,则会调用具有匹配数量的参数的另一个构造函数。因此说MyType o{0}MyType o(0)相同。如果我的理解是错误的,请纠正我。

但是,在这种情况下,将代码更改为读取FILE* d_fp(0)会导致编译器错误:

main.cpp:47:11: error: expected ';' at end of member declaration
   47 |     FILE* d_fp(0);
      |           ^~~~
      |               ;
main.cpp:47:16: error: expected unqualified-id before numeric constant
   47 |     FILE* d_fp(0);
      |                ^
main.cpp:47:16: error: expected ')' before numeric constant
   47 |     FILE* d_fp(0);
      |               ~^
      |                )

因此有两个问题:

  1. 在这种情况下,为什么d_fp(0)d_fp{0}做的事情不同?

  2. 程序员选择d_fp{0}而不是更直观的d_fp = 0初始化的原因可能是什么?仅仅是一个口味问题,还是实际上不是一回事?

0 个答案:

没有答案