首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在构造函数中初始化常量字段?

如何在构造函数中初始化常量字段?
EN

Stack Overflow用户
提问于 2009-09-14 20:22:08
回答 6查看 89K关注 0票数 77

假设我有一个C++类Foo和一个必须使用构造函数创建的Bar类,其中传递了Foo指针,并且这个指针在Bar实例的生命周期中保持不变。正确的做法是什么?

实际上,我认为我可以像下面的代码一样编写,但它不能编译。

代码语言:javascript
复制
class Foo;

class Bar {
public:
    Foo * const foo;
    Bar(Foo* foo) {
        this->foo = foo;
    }
};

class Foo {
public:
  int a;
};

欢迎任何建议。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-09-14 20:24:14

您需要在初始化器列表中执行此操作:

代码语言:javascript
复制
Bar(Foo* _foo) : foo(_foo) {
}

(请注意,我重命名了传入变量以避免混淆。)

票数 97
EN

Stack Overflow用户

发布于 2009-09-14 20:26:00

我相信您必须在初始化器中执行此操作。例如:

代码语言:javascript
复制
Bar(Foo* foo) : foo(foo) {
}

顺便说一句,如果你永远不会改变foo所指向的东西,那就把它作为一个引用来传递:

代码语言:javascript
复制
Foo& foo;

Bar(Foo& foo) : foo(foo) {
}
票数 23
EN

Stack Overflow用户

发布于 2009-09-14 20:25:37

初始化常量成员和其他特殊情况(如父类)可以在初始化器列表中完成

代码语言:javascript
复制
class Foo {
private:
   const int data;
public:
   Foo(int x) : data(x) {}
};

或者,类似地,对于父级初始化

代码语言:javascript
复制
class Foo {
private:
   int data;
public:
   Foo(int x) : data(x) {}
};

class Bar : Foo {
public:
   Bar(int x) : Foo(x) {}
};
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1423696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档