我已经浏览了有关初始化程序列表和成员初始化的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);
| ~^
| )
因此有两个问题:
在这种情况下,为什么d_fp(0)
与d_fp{0}
做的事情不同?
程序员选择d_fp{0}
而不是更直观的d_fp = 0
初始化的原因可能是什么?仅仅是一个口味问题,还是实际上不是一回事?