如何在构造函数中初始化一个常量字段?
想象一下,我有一个C ++类Foo和一个类Bar,必须使用构造函数创build一个Foo指针,并且该指针在Bar实例生命周期中保持不变。 什么是正确的做法呢?
事实上,我以为我可以写下面的代码,但它不编译..
class Foo; class Bar { public: Foo * const foo; Bar(Foo* foo) { this->foo = foo; } }; class Foo { public: int a; }; 任何build议是值得欢迎的。
您需要在初始化程序列表中执行此操作:
 Bar(Foo* _foo) : foo(_foo) { } 
(请注意,我重命名传入的variables以避免混淆。)
我相信你必须在初始化程序中做到这一点。 例如:
 Bar(Foo* foo) : foo(foo) { } 
作为一个方面说明,如果你永远不会改变什么foo指向,通过它作为参考:
 Foo& foo; Bar(Foo& foo) : foo(foo) { } 
初始化const成员和其他特殊情况(如父类)可以在初始化程序列表中完成
 class Foo { private: const int data; public: Foo(int x) : data(x) {} }; 
或者,类似地,对于父代初始化
 class Foo { private: int data; public: Foo(int x) : data(x) {} }; class Bar : Foo { public: Bar(int x) : Foo(x) {} }; 
您需要在初始化程序列表中初始化foo。
 class Bar { Foo* const foo; public: Bar(Foo* f) : foo(f) {...} }; 
使用参考:
 Foo& foo; Bar(Foo& f) : foo(f) { } 
 您可以在Bar轻松地引用foo : 
 foo.doSomething(); 
 尝试: Bar(Foo* xfoo) : foo(xfoo) {}