2

这可能只是学术兴趣。

因为我注意到我的实际例子可能不适合提出这个问题。

最初我写了类似的东西

auto bak_ptr{ptr}; // think of an `int* ptr`

备份地址。auto现在我想知道我是否可以通过用更有意义、视野更开阔的 C++20 概念来代替这个愚蠢的概念来做得更好。

经过一番思考,该特定示例中的正确选择可能只是

std::copyable auto bak_ptr{ptr};

因为这反映了备份的意图,即某物的副本。

但是剩下的学术问题是:正确映射原始指针概念的行为的正确(概念标准库)实现是什么?如有必要,让我们将“指针”限制为指向对象的指针。还有指向 void、函数、成员的指针——可能会使问题复杂化。

我想到了与迭代器的关系。希望不会再次正确回答我自己的问题:std::contiguous_iterator在某些情况下会是一个有价值的选择吗?有人可以就该主题分享或多或少完整的专家观点吗?

为什么还没有针对该概念的 std::pointer_to_object 标准库实现(当着你的面大喊大叫)?

4

2 回答 2

2

只是建立起来std::is_pointer应该没有错

template <class T>
concept pointer =
  std::is_pointer_v<T>;

感谢@cigien的这个想法。

我想说的是,在简单的备份示例中,std::copyable相反的选择是完全正确的。由于这就是您要对备份执行的操作,请通过复制再次恢复它。

于 2020-10-29T14:52:45.840 回答
0

发出bak_ptr一个指向对象的原始指针的信号不需要任何花哨的恶作剧:

auto* bak_ptr{ptr};
于 2020-10-29T14:56:38.053 回答