c++初始化指针数组



我知道对于指针你可以这样做:

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};称为聚合初始化。它在赋值中没有对应的值,所以写入

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++ 11开始,您可以使用nullptr代替0。首选使用nullptr,因为它是指针而不是整数。然后,你可以这样做:

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

无论如何,你的代码在我的编译器上工作得很好,你可以看到一个使用0nullptr的例子,在ideone上编译没有错误。

相关内容

  • 没有找到相关文章