"结构化绑定"与"分解声明"

s3r*_*vac 5 c++ c++17

观察:

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

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

问题:

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

Bar*_*rry 11

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

auto [x,y] = Point(4,2);
Run Code Online (Sandbox Code Playgroud)

完整的语句被称为"结构化绑定声明",而标识xy被称为"结构化绑定".这些将是C++ 17中的官方术语.实际上,最新的草案部分现在标题为结构化绑定声明.


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

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