【发布时间】:2012-11-23 10:15:18
【问题描述】:
以下链接提供了引用折叠的 4 种形式(如果我是正确的,这些是仅有的 4 种形式):http://thbecker.net/articles/rvalue_references/section_08.html。
来自链接:
- A&&变成A&
- A& && 变成 A&
- A&& & 变成 A&
- A&& && 变为 A&&
虽然我可以做出有根据的猜测,但我想简要解释一下这些引用折叠规则背后的基本原理。
一个相关的问题,如果可以的话:这些引用折叠规则是否在 C++11 中 被 std::move()、std::forward() 等 STL 实用程序内部使用,在典型的现实世界用例? (注意:我特意询问是否在 C++11 中使用了引用折叠规则,而不是在 C++03 或更早版本中。)
我问这个相关的问题是因为我知道像std::remove_reference 这样的 C++11 实用程序,但我不知道在 C++11 中是否经常使用像 std::remove_reference 这样的引用相关实用程序到 避免需要引用折叠规则,或者是否将它们与引用折叠规则结合使用。
【问题讨论】:
-
您可能会对 Scott Meyers 的 this video 感兴趣。
-
现在看。谢谢!
-
“典型的现实世界用例” - 完美转发(我称之为非常有用的现实世界用例)完全建立在那些参考折叠规则之上(并且可能我认为,反过来又是设计这些规则的实际原因)。通过引入一种利用移动语义的新型引用,他们也有机会定义相应的折叠规则以促进完美转发,从而用一个特征解决两个问题。
-
我认为
A& & becomes A&不是引用折叠。