【问题标题】:Constant variable initializing working only with member initialization list常量变量初始化仅适用于成员初始化列表
【发布时间】:2017-03-13 07:15:27
【问题描述】:

考虑一下代码 sn-p

 class Test{
  const int i;
  public:
 // Test(int x):i(x){} This works
  Test(int x){
      i=x;
  } //this doesn't work

为什么内联成员初始化列表有效,而普通初始化无效?

【问题讨论】:

  • 所谓的“正常初始化”并不是初始化。有很多关于初始化数据成员的帖子。
  • i = x; 不是初始化。这是作业。您可以更改 const 变量的值。

标签: c++ constructor constants member-initialization initialization


【解决方案1】:

注意i=x; 是一个赋值。如果您不通过成员初始化器列表对其进行初始化,i 将尝试默认初始化,然后在构造函数的主体中分配。

但作为 const 变量,i 不能被默认初始化(或赋值)。所以必须在member intializer list中指定才能初始化。

成员初始化列表是可以指定这些对象的非默认初始化的地方。对于无法默认初始化的成员,例如引用成员和 const 限定类型的成员,必须指定成员初始化器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 2021-06-21
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多