为什么建议使用统一初始化(使用大括号初始化)?

时间:2017-09-25 11:00:37

标签: c++

我看到统一初始化的许多不同的地方是recommended。 Herb Sutter recommends它,当使用它时给出一个列表。似乎普遍的共识是使用这种语法。

但是,我不明白为什么。它有std::initializer_list优先的问题。向类添加std::initializer_list可能会破坏代码。使用模板时,建议不要使用。似乎有比#34; old"更多例外。办法。旧的方式都没有出现这些问题。

我不明白为什么统一初始化是优越的。我的结论是继续使用()语法,并且在我想要使用{}调用构造函数的情况下,仅使用std::initializer_list

为什么呢?统一初始化给出了什么?

  • 禁止收窄:良好的功能。但是,由于我已经缩小警告,所以所有我的代码(因为我想知道我的代码中的所有缩小,而不仅仅是初始化),我不太需要这个功能。
  • 最令人烦恼的解析:是的,这是一个问题,但我很少这么做。所以这不是(对我而言)切换的原因。这个地方,我可以使用{}
  • 还有什么(也许,我还在学习C ++的新功能)?

" old"方式,没有规则要记住,没有可能的代码破坏。只是使用它,有时,非常非常罕见,你打了最令人烦恼的解析。这就是全部。

我的想法在某处错了吗?

1 个答案:

答案 0 :(得分:0)

看起来你对技术方面有很好的把握,nwp在评论中提出了我要提到的另一个问题,即清晰度。所以我认为您拥有做出决定所需的信息。

那就是说,我认为值得加倍努力并试图强调清晰度方面的重要性。根据我的经验,代码清晰度可能是在代码库中维护的最重要的事情。特别是在避免混淆和限制浪费在愚蠢的错误上的时间方面。我想我们都有过花费太长时间来调整一段错误代码流的经验,最终发现这个问题是对原始意图的错误或误解。

公平地说,听起来你已经试图通过坚持一种有助于解决这个问题的风格和工具来解决这个问题。标准参数,nwp开始,是许多人不能偏离语言中内置的命名约定,也不能使用IDE。我个人对这种逻辑表示同情,但也理解为什么许多人将其视为过时的甚至是非问题(特别是对于IDE的情况)。

然而,当涉及到清晰的问题时,我发现很难不记住人们在忽视细微的细节方面非常擅长,即使他们可能会帮助他们。因此,更多的上下文线索可以暗示问题可能更好。语法突出显示很棒,但我不打算在调试之后能够注意到黄色而不是橙色。黄色并使用驼色表壳?也许。黄色和使用牙套?也许

特别是当你开始接触别人写的代码时,或者很久以前,所有这些小提示开始变得越来越重要。

在一天结束时,我认为这就是人们喜欢推荐它的原因。在重要的时候,这种事情可能会对你有所帮助。

此外,还有一份附注,以回应您关于缩小范围的评论。为缩小启用警告可能允许您暂时忽略此优势,但在许多情况下,人们1)由于遗留代码而无法启用此类警告或2)不希望启用此类警告,因为他们故意依赖此类行为在某些情况下,会认为这些警告是令人讨厌的。但是,在任何一种情况下采用列表初始化不仅有助于防止潜在问题,而且有助于明确给定代码行的意图。

为了达到目的,人们都有不同的情况和偏好。这样的功能增加了人们可以提高代码质量/可读性的方式,同时仍然可以在任何限制条件下工作(自我强加或其他方式)。