C++ 你能把指针转换成数组吗?

C++ 你能把指针转换成数组吗?,c++,c++11,C++,C++11,我有一个指针“a”,它的类型是a*。我现在知道在那个地址有n个类型为A的对象,我想对它们进行迭代 我想将它转换为[n],这样我就可以使用c++11范围,并为(auto-temp:A){…}编写。 当然,我可以使用一个经典的代码>(int i=0;i < p>在合理的代码中),我会回避它。但是C++允许你进行纯粹的恶魔行为。 您可以编写一些准备模板,但需要进行大量的混淆: namespace std { template <typename T> T* begin(std::p

我有一个指针“a”,它的类型是a*。我现在知道在那个地址有n个类型为A的对象,我想对它们进行迭代

我想将它转换为[n],这样我就可以使用c++11范围,并为(auto-temp:A){…}编写
。
当然,我可以使用一个经典的代码>(int i=0;i < p>在合理的代码中),我会回避它。但是C++允许你进行纯粹的恶魔行为。
您可以编写一些准备模板,但需要进行大量的混淆:

namespace std
{
    template <typename T> T* begin(std::pair<T*, T*> const& a)
    {
        return a.first;
    }

    template <typename T> T* end(std::pair<T*, T*> const& a)
    {
        return a.second;
    }
}

<>模板模板带来了<>代码>开始>代码>代码> >结束>代码> 循环> ./P>。请自己帮个忙,使用<代码> STD::数组< /COD>。编译时未显示大小,我用n作为例子。使用<代码> STD::向量< /代码>。@ USER370139C++不允许你投一个指向数组类型的原始指针。所以没有。您需要实现这个解决方案:您可以使用UB将这些重载添加到
std
命名空间中,不是吗?我认为,对于模板专门化,甚至是部分的。Cf
std::hash
。也许专家可以确认。我认为从事标准工作的人应该考虑使用resfor range循环中
std::equal_range
的结果。@NathanOliver:
[C++14:17.6.4.2.1/1]
如果
T
是用户定义的,则看起来可以。@BoundaryPosition:但我们不能在
T
上添加此限制(通过
std::enable_if
例如:-/)
for (auto&& i : std::make_pair(a, a + n)){

}