C++ 在C++;11?

C++ 在C++;11?,c++,c++11,initialization,c++14,C++,C++11,Initialization,C++14,已更新 我已经浏览了一些链接(例如)关于何时应该使用括号初始化,但是没有给出关于何时应该使用括号初始化C++11/14中的对象的信息?什么标准实践建议使用()而不是{} 在少数情况下,如向量v(10,20)或自动v=向量(10,20),结果是一个包含10个元素的std::vector。如果我们使用大括号,结果是一个包含2个元素的std::vector。但这取决于调用者的使用情况:他/她想要分配10个元素的向量还是2个元素的向量?恭喜你,你刚刚找到了一个典型的例子,说明了如果你的编译器支持,为什么

已更新

我已经浏览了一些链接(例如)关于何时应该使用括号初始化,但是没有给出关于何时应该使用括号初始化C++11/14中的对象的信息?什么标准实践建议使用
()
而不是
{}


在少数情况下,如
向量v(10,20)或<代码>自动v=向量(10,20),结果是一个包含10个元素的
std::vector
。如果我们使用大括号,结果是一个包含2个元素的
std::vector
。但这取决于调用者的使用情况:他/她想要分配10个元素的向量还是2个元素的向量?

恭喜你,你刚刚找到了一个典型的例子,说明了如果你的编译器支持,为什么你更喜欢大括号初始化

如果需要两个元素的
std::vector
,可以使用:

vector<int> v = { 10, 20 };
向量v={10,20};
如果你使用向量v(10,20)实际上调用的构造函数包含两个整数可转换元素,这是签名
显式向量(size\u type n、const-value\u type&val=value\u type()、const-allocator\u type&alloc=allocator\u type())请记住,
std::vector
是在C++98中添加到语言中的,而大括号初始化直到C++11才添加


请参见Scott Meyers在其精彩绝伦的“高效现代C++”中的第7项中专门解决了这个问题。他详细分析了这两种语法的区别、优点和缺点,并得出结论

没有共识认为这两种方法都比另一种好,所以我的建议是选择一种并始终如一地应用它


另一方面,C++核心指南建议你,这样也许是更好的缺省值。< /P>当你想调用构造函数时,使用<代码>(/>)> @ AlxEdIn,当你想调用构造函数时,你也可以使用<代码> {} /代码>。在这方面,
()
{}
没有区别。@juanchopanza似乎是这样!我不知道。@ JuangophanZa我认为问题不是重复的,当使用{}而不是什么时候我们应该使用括号()时,我倾向于同意迈尔斯的这一点,但是我也必须在很多情况下编写代码,这些代码必须用缺少对{}初始化列表的支持的旧版本的Visual C++来构建。与自动
一样,在提高可读性和模糊可读性方面,这往往是一个判断问题。不过,如果你对C++完全陌生,那么你可能更安全地使用每个核心指南的{}初始化器规则。为什么这是一个为什么你应该喜欢一个而不是另一个?对我来说,它更像是一个你没有选择的例子。这是由萨特和Bjarne Stroustrup在核心C++指南中的很多细节所涵盖的。