C ++初始化指针数组

时间:2015-10-14 05:21:58

标签: c++ pointers array-initialization

我知道指点你可以这样做:

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;

2 个答案:

答案 0 :(得分:1)

表单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;

答案 1 :(得分:0)

从C ++ 11开始,您可以使用nullptr代替0。首选使用nullptr,因为它是指针而不是整数。然后,你可以这样做:

T * myPtrArray[2] = {nullptr, nullptr};

无论如何,您的代码在我的编译器上工作正常,您可以看到使用0nullptr编译而没有错误on ideone的示例。