指针初始化

时间:2012-02-10 18:55:42

标签: c++ pointers initialization

我已经看到很多关于指针初始化的问题,但我找不到最近困扰我的事情的答案。为什么它适用于gcc:

class C {
};

/* other stuff here */

typedef C* pTypeC;
C* pOtherTypeC = pTypeC(0);

在typedef上使用“(0)”来初始化带有NULL的指针是否有效?

4 个答案:

答案 0 :(得分:3)

问题是pTypeC(0)被认为是一个转换操作。

C* pOtherTypeC = (pTypeC) (0);

希望这有帮助!

答案 1 :(得分:0)

它正在初始化C*C*,初始化为0。这是完全合法的,但你应该更喜欢C* blah = nullptr,尽管两者都做同样的事情。

答案 2 :(得分:0)

NULL的值可以通过几种不同的方式定义。有时它可以简单地将值0赋值给指针,此时存在从积分到指针类型的隐式转换,有时它是使用诸如(void*)0之类的强制转换定义的,允许它为转换为任何其他指针类型,但如果你明确地将它指定给非指针类型失败,并且在C ++ 11中有一个特定的全局nullptr对象,你可以使用它来初始化一个带有“NULL”的指针值。

一般情况下,如何初始化指针令人困惑,并且不是推荐的编码实践。只需向指针显式指定nullptrNULL,如果选择NULL,如果您没有包含任何其他头文件,请确保包括<cstddef>你不会遇到编译错误。

答案 3 :(得分:0)

你正在做的不是对象的初始化,你没有分配任何新内存或创建任何新对象 - 你正在指定一个指向NULL的指针(等于整数价值0)。

向后工作:

C* pOtherTypeC = pTypeC(0);
C* pOtherTypeC = pTypeC(NULL);
C* pOtherTypeC = C*(NULL);
C* pOtherTypeC = (C*) NULL;
C* pOtherTypeC = NULL;

所有五行在功能上都是等效的,并且会产生相同的结果。