我找到了 *C++ 结构化绑定的原始提案here http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0144r0.pdf。它提出了一种轻松绑定多个返回值的方法,即:
auto {a, b} = minmax(data);
但现在我看到每个人都指向 C++17/C++1z 提案语法
auto [a, b] = minmax(data);
现在我学会了“列表是这样写的”,有一个新的列表语法吗?为什么?这里的花括号有什么问题?
西班牙和美国的国家机构已提议改回{}
语法因为 (P0488R0 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0488r0.pdf):
最初使用的“结构化绑定”提案
大括号“{}”来分隔绑定标识符。那些
分隔符改为括号“[]”
断言他们没有引入任何语法
问题。然而他们却介绍了
属性和 lambda 的语法歧义。在
根据各种建议的修复,看来
原来的语法更合适。
因此,仍然有可能最终拥有 C++17 的原始语法(我坚信大多数用户更喜欢这种语法)。
Update由此旅行报告 https://botondballo.wordpress.com/2016/11/25/trip-report-c-standards-meeting-in-issaquah-november-2016/:
分解声明的原始提案使用的语法auto {a, b, c};
在上次会议上更改为auto [a, b, c]
。这一更改颇具争议,一些评论要求将其改回{}
(而其他人则鼓励保留[]
)。双方都有技术争论([]
一旦开始允许嵌套分解,语法可能会与属性发生冲突;这{}
如果您将概念混入其中并允许使用概念名称而不是统一初始化,则语法可能会与统一初始化发生冲突auto
),所以最终这很大程度上取决于品味。 clang 实现者确实报告说他们尝试了这两种方法,并发现更容易解决歧义[]
。最终没有达成改变的共识,所以现状([]
语法)仍然存在。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)