[英]Const pointer to an array of pointers
我有这堂课
struct A {
A();
Item* m_Items[ON_CPU + ON_GPU];
Item** m_ItemsOnCpu;
Item** m_ItemsOnGpu;
};
我需要初始化
m_ItemsOnCpu到m_Items
和
m_ItemsOnGpu到m_Items + ON_CPU
所以我需要const指针指向数组的两个部分。 我如何声明然后初始化它们?
在C ++ 11中,您可以这样做:
struct A {
A();
Item* m_Items[ON_CPU + ON_GPU];
Item** const m_ItemsOnCpu = m_Items;
Item** const m_ItemsOnGpu = m_Items + ON_CPU;
};
在其他版本的C ++中,使用初始化列表:
struct A {
A() : m_ItemsOnCpu(m_Items), m_ItemsOnGpu(m_Items + ON_CPU) {};
Item* m_Items[ON_CPU + ON_GPU];
Item** const m_ItemsOnCpu;
Item** const m_ItemsOnGpu;
};
所以你想要这样的东西:
struct A {
A(): m_ItemsOnCpu(m_Items), m_ItemsOnGpu(m_Items + ON_CPU) {};
Item* m_Items[ON_CPU + ON_GPU];
Item** const m_ItemsOnCpu;
Item** const m_ItemsOnGpu;
}
据我了解,你想在m_Items的开头有m_ItemsOnCpu点,在m_Items中间的某个地方有m_ItemsOnGpu。
通过指向Item指针,我不知道你想要实现什么。 您可以使用两个单独的Item *数组。 如果它们需要在内存中连续,那么类或结构成员会自动出现这种情况,尽管由于结构成员对齐可能会有一个小的间隙,在大多数编译器上你可以设置为1个字节, 即MSVS 。
我想你想要const指针,所以你的类的用户不能修改它们(const指针指向Item, Item ** const m_ItemsOnCpu
)。 这可以通过使用getter函数而不是公开公开成员变量来实现。 Const对象需要初始化并且无法分配。 由于m_Items的地址是在运行时确定的,所以我没有看到初始化const指针的方法。
另一个可能的目标是你不希望用户修改m_ItemsOnCpu和m_ItemsOnCpu指向的指针(指向const指针的指针, Item * const * m_ItemsOnCpu
)。 然后,您可以初始化它们指向适当的位置。 一个最小的例子是:
#define ON_CPU 5
#define ON_GPU 5
class Item {};
struct A {
A() {
m_Items[0] = 0; // initialize your array here
m_ItemsOnCpu = &(m_Items[0]);
m_ItemsOnGpu = &(m_Items[ON_CPU]);
};
Item * m_Items[ON_CPU + ON_GPU];
Item * const * m_ItemsOnCpu;
Item * const * m_ItemsOnGpu;
};
int main() {
}
我希望这有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.