为什么直接从另一个构造函数调用的构造函数不能修改C++中的类变量?

例如,在以下代码中,evenNum()被调用,但是val类变量未修改。因此,它打印0(默认值),而不是预期的2。

#include <iostream>

class evenNum {
  public:
    int val;
    evenNum(){
      this->val = 2;
    }
    evenNum(int var)
    {
      if(var%2==0){
        this->val = var;
      }else{
        evenNum();
      }
    }
};

int main() {
  evenNum e(7);
  std::cout << e.val;
}

最佳答案

线

    evenNum();

创建一个临时对象。它对正在构造的对象不起作用。

您可以使用委派构造器,也可以直接设置成员变量的值。
evenNum(int var) : evenNum()
{
  if(var%2==0){
    this->val = var;
  }
}

要么
evenNum(int var)
{
  if(var%2==0){
    this->val = var;
  }else{
    this->val = 2;
  }
}

使用委托(delegate)的构造函数更好。它清楚地表达了意图并减少了代码重复。

10-07 17:47