Aja*_*dav 8 c++ initialization c++11 c++14
更新
我已经通过链接(例如何时使用大括号括起来的初始化程序?)何时应该使用{}大括号初始化,但是当我们应该使用括号( )与初始化{ }语法来初始化C++中的对象时,没有给出信息./ 14?什么标准的做法,建议使用()过{}?
在极少数情况下,例如vector<int> v(10,20);或auto v = vector<int>(10,20);,结果是std::vector10个元素.如果我们使用大括号,结果是std::vector2个元素.但这取决于调用者的用例:要么他/她想要分配10个元素的矢量还是2个元素?
恭喜,您刚刚找到了一个规范示例,说明如果您的编译器支持,您应该更喜欢花括号初始化的原因。
如果你想要std::vector两个元素中的一个,你可以使用:
vector<int> v = { 10, 20 };
如果您使用,vector<int> v(10,20);您实际上是在调用带有两个整数可转换元素的构造函数,explicit vector  (size_type n, const value_type& val = value_type(), const allocator_type& alloc = allocator_type());请记住,它std::vector是在 C++98 中添加到语言中的,而花括号初始化直到 C++11 才被添加。
请参阅核心 C++ 指南,特别是ES.23:首选 {} 初始值设定项语法
Scott Meyers在其出色的"Effective Modern C++"的第7项中解决了这个问题.他贯穿了两种语法的差异,优点和缺点,并得出结论
没有人认为任何一种方法都比另一方更好,所以我的建议是选择一种方法并始终如一地应用它.
另一方面,C++核心指南建议你更喜欢初始化语法,所以也许这是更好的默认设置.
| 归档时间: | 
 | 
| 查看次数: | 2806 次 | 
| 最近记录: |