r值引用和指针之间的确切对应关系?

问题描述 投票:1回答:2

这是关于C ++语言中的指针和引用类型之间的对称性的一般问题。

此对应关系表在C ++(C ++ 11及更高版本)中有意义吗?

| Reference | Pointer  |
|-----------|----------|
| T&        | T*       |
| T const&  | T const* |
| T&&       | ???*     |

[如果有的话,对应于???*?。(是否缺少其他行?)]

我想它会对应于std::move_iterator<T*>之类的东西,但它不是内置语言,并且似乎还会产生许多其他问题(例如std::move_iterator<T*>一样。]]

语言是否缺少某种r值指针以更加对称?最好说的是在取消引用时生成r值的东西(例如,移动的对象-甚至是副本)。

我知道r值引用对应于“没有名称”的事物,但是,如果仅通过遵从操作std::reference_wrapper获得相同的事物,这似乎并不具有约束力。


注1:

我看到*在C ++ 20中已弃用。我不确定这意味着什么,也许意味着它有时可以可选地实现。这个问题与这种弃用有关,因为原则上std::move_iterator<It>::operator->()可以返回std::move_iterator<It>::operator->()而不是std::move_iterator<It>::operator->()。 (或返回???*,尽管它将生成pointer运算符的无限回归……除非存在用于r值的真实指针。)


注意2:我可以想象的一个候选缺失行是:

move_iterator<pointer>

但是我认为这与问题中所问的来往无关,而是语言中->()的正常异常。

这是有关C ++语言中的指针和引用类型之间的对称性的一般问题。该对应关系表在C ++(C ++ 11及更高版本)中有意义吗? |参考|指针| ----...

c++11 pointers move-semantics rvalue-reference
2个回答
1
投票

没有“指针和引用类型之间的对称性”。或至少没有打算成为一个。您可以根据自己的喜好来解释语言,但是看到的任何对称都是偶然的。


0
投票

此对应关系表在C ++(C ++ 11及更高版本)中有意义吗?

© www.soinside.com 2019 - 2024. All rights reserved.