为什么建议统一初始化(用牙套初始化)

Why uniform initialization (initialization with braces) is recommended?

本文关键字:初始化 为什么      更新时间:2023-10-16

我看到了许多不同的位置,建议使用统一的初始化。Herb Sutter推荐它,并在使用不是时提供列表。似乎一般共识是使用此语法。

但是,我不明白为什么。它具有std::initializer_list的问题。将std::initializer_list添加到类中可以破坏代码。使用模板,不建议使用。似乎比"旧"方式更有例外。这些问题都不存在于旧方法。

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

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

  • 禁止缩小:良好的功能。但是,由于我已经缩小警告为 all 我的代码(因为我想知道代码中的所有狭窄,而不仅仅是初始化),所以我不需要此功能太多。
  • 最烦人的解析:是的,这是一个问题,但是我很少打入这个问题。因此,这不是(我)切换的原因。在这个地方,我可以使用{}
  • 还有其他东西(也许我仍在学习C 的新功能)?

使用"旧"方式,没有任何规则要记住,也没有可能的编码。只需使用它,有时很少使用它,您就会击中最烦人的解析。仅此而已。

我在某个地方有错误的想法吗?

看来,您对技术方面有一个不错的看法,nwp在评论中提出了我要提到的另一个问题。因此,我认为您有做出决定所需的信息。

也就是说,我认为值得一提,并试图强调清晰度的重要性。以我的经验,代码清晰度可能是在代码库中维护的最重要的事情。特别是在避免混乱和限制时间浪费时间上。我认为我们所有人都有花费太长的经验来调整一件货物代码的流程,以最终发现问题是对原始意图的错别字或误解。

公平地说,听起来您试图通过坚持有助于解决这个问题的样式和工具来解决这个问题。正如nwp所开始的那样,标准参数是,许多人不偏离语言内置的命名约定,也不使用IDE。我个人同情这种逻辑,但也明白了为什么许多人无视它是老式的,甚至是非问题(尤其是对于IDE的情况)。

当涉及到清晰的问题时,我发现很难牢记人们即使在可能会帮助他们的情况下也很烦人地忽略次要细节。因此,可以暗示问题可能更好的上下文线索。语法突出显示很棒,但是我不会打赌一个晚上调试,能够注意到某些东西是黄色而不是橙色的。黄色并使用骆驼例?或许。黄色并使用牙套?也许。

尤其是当您开始涉及其他人写的代码时,或者很久以前,所有这些小提示就越来越重要。

在一天结束时,我认为这就是为什么人们喜欢它来推荐它的原因。这是一种重要的事情,可能会在您身上伸出来。


另外,响应您对缩小的评论的旁注。启用警告以进行缩小的警告可能使您目前可以忽略此收益某些情况,并将警告视为滋扰。但是,在两种情况下都采用列表初始化可以不仅有助于防止潜在问题,而且还可以明确指定代码。

要达到这一点,人们都有不同的情况和偏好。像这样的功能增加了人们可以提高代码质量/可读性的方式,同时仍在他们可能拥有的任何约束中工作(自我强加或其他)。