我知道通过指针你可以做到这一点:
T * myPtr = 0;
将指针设置为 NULL 值。但是,当我尝试这样做时:
T * myPtrArray[2] = {0, 0};
我收到“预期表达式”语法错误。为什么?
请注意,我使用的是 g++,上面的代码出现在类构造函数中:
template <class T>
RBTree<T>::RBTree() {
m_Data = T();
m_Children = {0, 0};
m_Parent = 0;
m_Color = BLACK;
}
有问题的类成员声明为:
T m_Data;
RBTree<T> * m_Children[2];
RBTree<T> * m_Parent;
bool m_Color;
最佳答案
T * myPtrArray[2] = {0, 0};
形式称为 aggregate initialization .它在分配中没有对应物,所以写
T * myPtrArray[2];
myPtrArray = {0, 0};
无效。
在类构造的情况下,聚合初始化在c++98/03中是不可用的。
如果你的编译器支持c++11标准,你可以使用统一的初始化语法。在您的示例中有两种初始化 m_Children
的方法:
#1
在构造函数中:
template <class T>
RBTree<T>::RBTree(): m_Children {0, 0} /* other init here */ {
}
#2
在类成员声明期间:
T m_Data;
RBTree<T> * m_Children[2] {0, 0};
RBTree<T> * m_Parent;
bool m_Color;
关于C++ 初始化指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33117165/