class Node { public: Node *parent; // used during the search to record the parent of successor nodes Node *child; // used after the search for the application to view the search in reverse float g; // cost of this node + it's predecessors float h; // heuristic estimate of distance to goal float f; // sum of cumulative cost of predecessors and self and heuristic Node() : parent( 0 ),child( 0 ),g( 0.0f ),h( 0.0f ),f( 0.0f ) { } UserState m_UserState; };
为什么我们应该使用构造函数
Node() : parent( 0 ),f( 0.0f ) { }
代替
Node() { parent = null; child = null; g = 0.0f; h = 0.0f; f = 0.0f; }
谢谢 :)
解决方法
对于简单的旧数据(POD),这没有什么好处,但一旦开始使用引用或组合类,它会有所不同:
class Foo { Bar bar; public: // construct bar from x Foo(int x) : bar(x) { } };
与
Foo::Foo(int x) { // bar is default-constructed; how do we "re-construct" it from x? bar = x; // requires operator=(int) on bar; even if that's available,// time is wasted default-constructing bar }
有时,一旦构造了对象,你甚至不会有一种“重新构建”对象的方式,因为类可能不支持setter或operator =. const成员肯定不能“重新构建”或重置:
class FooWithConstBar { const Bar bar; public: Foo(int x) { // bar is cast in stone for the lifetime of this Foo object } };
编辑:感谢@Vitus指出引用的问题.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。