前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++那些事之类成员初始化列表中的注意事项

C++那些事之类成员初始化列表中的注意事项

作者头像
公众号guangcity
发布2023-12-13 14:13:46
1110
发布2023-12-13 14:13:46
举报
文章被收录于专栏:光城(guangcity)

C++那些事之类成员初始化列表中的注意事项

在C++中,类的正确初始化是确保程序正常运行的关键步骤之一。尤其是在使用初始化列表时,我们需要注意一些潜在的陷阱,以避免在代码执行过程中产生意外的结果。

初始化列表通常被认为是设置新类实例状态的首选方法,因为它提供了一种简洁、高效的方式来初始化类成员。然而,有时候在初始化列表中引用其他成员变量可能导致一些令人困惑的问题。

问题示例

考虑以下的Foo类:

代码语言:javascript
复制
#include <iostream>

class Foo
{
public:
  Foo(int size) : size_(size),
                 capacity_(size_ + 2),
                 length_(capacity_)
  {}

  void print() {
    std::cout << "Size: " << size_ << " Capacity:  " << capacity_ << " Length: " << length_  << std::endl;
  }

private:
  int length_;
  int capacity_;
  int size_;
};

int main() {
  Foo foo(50);
  foo.print();
}

在这个例子中,我们试图通过初始化列表中引用其他成员变量的方式来初始化length_capacity_size_。然而,由于类成员的初始化顺序是按照它们在类中声明的顺序进行的,可能导致length_capacity_并没有按照我们期望的方式初始化。

如何解决?

为了避免这种问题,应该遵循以下几点:

1.避免在初始化列表中引用其他成员变量

2.顺序一致性:成员变量的初始化顺序是按照它们在类中声明的顺序

修正示例:

代码语言:javascript
复制
#include <iostream>

class Foo
{
public:
  Foo(int size) : size_(size),
                 capacity_(size_ + 2),
                 length_(calculateLength(size_))
  {}

  void print() {
    std::cout << "Size: " << size_ << " Capacity:  " << capacity_ << " Length: " << length_  << std::endl;
  }

private:
  int calculateLength(int size) {
    return size + 2;
  }

private:
  int size_;
  int capacity_;
  int length_;
};

int main() {
  Foo foo(50);
  foo.print();
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 光城 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C++那些事之类成员初始化列表中的注意事项
    • 问题示例
      • 如何解决?
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档