我看到统一初始化的许多不同的地方是recommended。 Herb Sutter recommends它,当不使用它时给出一个列表。似乎普遍的共识是使用这种语法。
但是,我不明白为什么。它有std::initializer_list
优先的问题。向类添加std::initializer_list
可能会破坏代码。使用模板时,建议不要使用。似乎有比#34; old"更多例外。办法。旧的方式都没有出现这些问题。
我不明白为什么统一初始化是优越的。我的结论是继续使用()
语法,并且在我想要使用{}
调用构造函数的情况下,仅使用std::initializer_list
。
为什么呢?统一初始化给出了什么?
{}
。" old"方式,没有规则要记住,没有可能的代码破坏。只是使用它,有时,非常非常罕见,你打了最令人烦恼的解析。这就是全部。
我的想法在某处错了吗?
答案 0 :(得分:0)
看起来你对技术方面有很好的把握,nwp
在评论中提出了我要提到的另一个问题,即清晰度。所以我认为您拥有做出决定所需的信息。
那就是说,我认为值得加倍努力并试图强调清晰度方面的重要性。根据我的经验,代码清晰度可能是在代码库中维护的最重要的事情。特别是在避免混淆和限制浪费在愚蠢的错误上的时间方面。我想我们都有过花费太长时间来调整一段错误代码流的经验,最终发现这个问题是对原始意图的错误或误解。
公平地说,听起来你已经试图通过坚持一种有助于解决这个问题的风格和工具来解决这个问题。标准参数,nwp
开始,是许多人不能偏离语言中内置的命名约定,也不能使用IDE。我个人对这种逻辑表示同情,但也理解为什么许多人将其视为过时的甚至是非问题(特别是对于IDE的情况)。
特别是当你开始接触别人写的代码时,或者很久以前,所有这些小提示开始变得越来越重要。
在一天结束时,我认为这就是人们喜欢推荐它的原因。在重要的时候,这种事情可能会对你有所帮助。
此外,还有一份附注,以回应您关于缩小范围的评论。为缩小启用警告可能允许您暂时忽略此优势,但在许多情况下,人们1)由于遗留代码而无法启用此类警告或2)不希望启用此类警告,因为他们故意依赖此类行为在某些情况下,会认为这些警告是令人讨厌的。但是,在任何一种情况下采用列表初始化不仅有助于防止潜在问题,而且有助于明确给定代码行的意图。
为了达到目的,人们都有不同的情况和偏好。这样的功能增加了人们可以提高代码质量/可读性的方式,同时仍然可以在任何限制条件下工作(自我强加或其他方式)。