如何在构造函数中初始化不可变字段:深入探索
在 C 语言中,可能会遇到这样的场景:您打算创建一个在其构造函数中需要不可变字段的类。在这种情况下,确保字段的不变性至关重要。本文将深入探讨实现此目标的正确方法。
考虑这样一个场景:类 Foo 作为数据结构,而类 Bar 是 Foo 的包装器,在构造过程中需要 Foo 指针作为参数。我们的目标是保证该指针在 Bar 实例的整个生命周期中保持不变。
尝试在 Bar 的构造函数中初始化 const 指针 foo 可能类似于以下内容:
<code class="cpp">class Foo; class Bar { public: Foo * const foo; Bar(Foo* foo) { this->foo = foo; // Compiler error } }; class Foo { public: int a; };</code>
但是,这种方法会触发编译错误。为了纠正它并在 Bar 实例中建立 foo 的不变性,我们需要使用一个初始化列表:
<code class="cpp">Bar(Foo* _foo) : foo(_foo) {}</code>
在此修订版本中,构造函数将 Foo 指针作为参数,将其分配给成员变量 foo 使用初始值设定项列表,并重命名传入变量以避免与成员变量发生潜在混淆。
此技术确保 foo 指针在 Bar 构造时立即初始化,使其对于 Bar 的其余部分不可变实例的生命周期。
以上是如何在 C 构造函数中初始化 Const 成员变量?的详细内容。更多信息请关注PHP中文网其他相关文章!