我看到很多不同的地方统一初始化是recommended。草药Sutter recommends它,并给出了当不是使用它的列表。看来普遍的共识是使用这种语法。为什么建议统一初始化(使用大括号初始化)?
但是,我不明白为什么。它有std::initializer_list
优先。将一个std::initializer_list
添加到类中可能会破坏代码。使用模板时,不建议使用。它似乎比“旧”的方式有更多的例外。旧的方式都不存在这些问题。
我看不出为什么统一初始化更好。我的结论是继续使用()
语法,并在当我想调用构造与std::initializer_list
的情况下使用{}
只。
为什么?统一初始化给了什么?
- 禁止缩小:很好的功能。但是,由于我缩小了警告,所以我的代码打开了全部(因为我想知道我的代码中的所有缩小,而不仅仅是初始化),所以我不需要太多这个功能。
- 最令人头疼的解析:是的,这是一个问题,但我非常少见。所以这不是一个理由(对我来说)切换。这个地方,我可以用
{}
。 - 还有什么(也许,我还在学习C++的新功能)?
随着“老”的方式,没有规则要记住,没有可能的破解代码。只要使用它,有时候,非常非常罕见的是,您会遇到最令人头疼的解析。就这样。
我的思维错了吗?
它有助于了解什么是功能,什么是对象。 'f(g(),h(j,i));'不如'f(g {},h(i,j));'清楚。当变量具有专有名称时,这仍然很重要。 – nwp
@nwp:yepp,这是一个有效的论点。但是,我有一个命名约定,我可以立即看到类型。此外,当前良好的IDE可以通过某种方式(着色,斜体,无论)显示它们之间的差异。 – geza
您的命名约定不会被STL或其他各种库所遵循。但是,当然,如果用一些外部工具替换支撑初始值设定项的大部分功能并单独工作,或者强迫您周围的人做同样的事情,则不需要它们。并非每个C++功能对每个人都有意义。 – nwp