0

我知道用指针你可以做到这一点:

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;
4

2 回答 2

1

这种形式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;
于 2015-10-14T06:06:13.117 回答
0

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

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

无论如何,您的代码在我的编译器上运行良好,您可以看到一个使用两者的示例,0并且在 ideone 上nullptr编译没有错误。

于 2015-10-14T05:35:40.923 回答