我对C ++编程不是很熟悉。我知道编程的基础知识(语法,指针等),我用它构建了一些基本程序,并在工作中完成了一些基本的调试。我对Box2D的这行代码感到困惑,特别是来自Cocos2D的Box2dTest项目:
// Define the ground body.
b2BodyDef groundBodyDef;
groundBodyDef.position.Set(0, 0); // bottom-left corner
如果没有初始化groundBodyDef
,如何才能做到这一点?我知道这不是Objective-C的事情,因为Box2D本身的C ++示例就像这样。
答案 0 :(得分:7)
groundBodyDef
实际上已初始化了!
我认为你期望的是:
b2BodyDef *groundBodyDef = new b2BodyDef();
实际上仍然有效,但它在堆上初始化。在您的版本中,groundBodyDef
在堆栈上初始化,就像您在堆栈上初始化int
一样。
在没有参数的情况下调用它时,使用默认构造函数。
答案 1 :(得分:2)
该对象已在第一行的构造函数中初始化。
我建议使用以下链接,这是关于C ++的非常好的文字:The C++ Annotations。
答案 2 :(得分:2)
如果b2BodyDef
有一个不错的默认构造函数,那么关于“没有初始化”的部分就不适用 - 默认的ctor HAS初始化groundBodyDef
!
答案 3 :(得分:1)
如果您执行classname variable;
,则variable
将通过调用classname
的默认构造函数进行初始化,这意味着代码中没有未初始化的变量。