我知道你可以用指南针做到这一点:
T * myPtr = 0;
它将指针设置为空值。然而,当我尝试这样做时:
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;
发布于 2015-10-14 06:06:13
表单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-14 05:35:40
从C++11开始,您可以使用nullptr
而不是0
。首选使用nullptr
,因为它是指针而不是整数。然后,你可以:
T * myPtrArray[2] = {nullptr, nullptr};
无论如何,您的代码在我的编译器上工作得很好,您可以看到使用0
和nullptr
编译而没有错误论意为的示例。
https://stackoverflow.com/questions/33117165
复制相似问题