"structured bindings"与"decomposition declarations"

"structured bindings" vs "decomposition declarations"

本文关键字:declarations decomposition bindings structured      更新时间:2023-10-16

观察:

  • 在P0217R3提案(2016-06-24)中,使用了结构化绑定术语。
  • 在当前的工作C++1z草案(2016-11-28)中,使用了分解声明术语。
  • 在P0615R0提案 (2017-03-01) 中,分解声明已重命名为结构化绑定
  • 引人注目的是,这篇博文(2017-01-09)包含以下文字:

分解声明。[..]最初称为"结构化绑定"。

  • 同样,这个问题(2017-03-04)包含以下文本:

[..]C++17 分解声明(以前称为"结构化绑定"的功能)。

问题:

  • 这两个中哪一个是我们应该使用的正确和最新的术语?
  • 为什么同一个概念有两个名字?
  • 如果分解声明真的重命名为结构化绑定,原因是什么?

新的正确名称将是"结构化绑定声明",基于 P0615 中的措辞。基本上,在:

auto [x,y] = Point(4,2);

完整的语句称为"结构化绑定声明",而标识符xy称为"结构化绑定"。这些将是C++17中的官方条款。事实上,最新的草案部分现在的标题是结构化约束声明。


问题是有两个概念,需要两个不同的名称——所以最初的措辞文件在声明声明中使用了分解声明(术语"结构化绑定"根本没有出现在措辞中)。但是,对于大多数用户来说,这是愚蠢的,因为只有一个概念 - 结构化绑定 - 因此使用两个不同的名称更难学习。如果编译器错误消息在其消息中使用"分解声明",则尤其令人困惑。无论使用术语"分解声明",功能的名称始终是结构化绑定。

在科纳,EWG决定坚持这两个名字,但至少让它们听起来密切相关。