gpt4 book ai didi

c++ - 如何在 C++ 运行时声明 n 阶指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:57 24 4
gpt4 key购买 nike

指针可以这样声明:

int
a = 1,
*b = &a, // 1st order pointer
**c = &b, // 2nd order pointer
***d = &c, // 3rd order pointer
****e = &d, // 4th order pointer
*****f = &e, // 5th order pointer
*** n-stars *** f; // n-th order pointer

在这里,我们需要在编译时知道指针在声明时的顺序。是否有可能声明一个指针,其顺序仅在运行时才知道?与这个问题相关的是,是否可以在运行时查询任意指针的顺序?

int order = GET_ORDER_OF_PTR(f) // returns 5
int /* insert some syntax here to make ptr a pointer of order (order + 1) */ ptr = &f;

注意:我已经知道这(通常)可能不是一个好主意。仍然想知道它是否可行:)

最佳答案

在运行时你不能——因为 C++ 是静态类型的。在编译期间可以使用模板,例如

template<typename T, int order> struct P
{
typedef typename P<T, order-1>::pointer* pointer;
};

template<typename T> struct P<T, 0>
{
typedef T pointer;
};

然后 P<int, 3>::pointer相当于int*** .

关于c++ - 如何在 C++ 运行时声明 n 阶指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25404149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com