c++ - 为什么一个 ctor 不能调用另一个 ctor 来初始化对象

标签 c++

class Foo {

 public:
  Foo() { Foo(1)}
  Foo(int x, int y = 0):i(x) {}
 private:
  int i;
}

任何人都可以给我一些关于我可以这样做的理由吗?如果不是,为什么?

最佳答案

因为语言规范不允许。语言就是这样。如果您习惯使用 Java 或其他允许它的语言,那将非常烦人。但是,一段时间后您就会习惯它。所有语言都有其怪癖,这只是 C++ 的其中一种。我相信规范的编写者有他们的理由。

我发现最好的解决方法是创建一个通用的初始化函数并让两个构造函数都调用它。

像这样:

class Foo {
public:
    Foo() {initialize(1);}
    Foo(int nX) { initialize(nx); }

private:
    void initialize(int nx) { x=nx; }
    int x;
};

关于c++ - 为什么一个 ctor 不能调用另一个 ctor 来初始化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2456862/

相关文章:

c++ - Lua C 5.1 - 遍历所有全局值

c++ - 用户模板化定义结构的 QList

c++ - 为什么我在使用 for 循环和 cout 命令时没有打印出 vector

c++ - 将next()、hasNext()迭代器接口(interface)转为begin()、end()接口(interface)

c++ - 我不明白析构函数有什么问题?

c++ - 终端不显示程序的警告...如何在终端中查看它们?

python - [咖啡] : Check failed: ShapeEquals(proto) shape mismatch (reshape not set)

c++ - 我的 C++ 程序在代码块中给出了正确的结果,但在 Visual Basic 2005 速成版中给出了错误的结果

c++ - 用 "if"建模 "for"

c++ - C++ 中的抽象/基本结构?