C ++构造函数隐式返回类型

时间:2015-04-14 19:54:07

标签: c++ constructor

我在理解构造函数的返回类型时遇到了一些麻烦,我的教授说

“构造函数不会从代码的角度返回任何内容。意思是,当您声明它时,您不会声明返回值。

它隐式返回一个指针(意思是,你无法改变行为)。作为旁注,它返回'this'指针。所有这些都不在程序员手中。“

这是说当你创建一个对象时,构造函数传递一个指针,还是我完全离开这里?

3 个答案:

答案 0 :(得分:2)

如果我们称之为“初始化程序”而不是“构造函数”会使其更容易理解?

构造函数实际上并不创建对象。它初始化对象。

没有任何回报。该对象是使用新的或自动或静态分配创建的。

答案 1 :(得分:2)

构造函数没有返回类型,因为它们不是函数。这就像询问int i;的返回类型是什么一样没有意义,int i不是表达式,Foo f;也不是。

可能有助于了解构造函数的C等价性。

考虑以下C ++代码......

class Foo {
  public:
    Foo(int i) : m_i(i)
    {
    }

  private:
    int m_i;
};

int main (void)
{
  Foo f(5);

  return 0;
}

在C中,我们将实现与...相同的实现。

typedef struct Foo {
  int m_i;
} Foo_t;

Foo_init (Foo_t * self, int i)
{
  self->m_i = i;
}

int main (void)
{
  Foo_t f; // This is the "Constructor" in C
  Foo_init(&f, 5); // Which is decorated with this logic.

  return 0;
}

Why do constructors not return values?(感谢@tivn)建议阅读。

答案 2 :(得分:0)

关于构造函数有两个前景,通常关于它们的讨论使两者混淆,导致难以引用。 (请注意,我将在下面简化定义与声明,并将它们视为简化比较的一件事)

您正在谈论的预期是构造函数的定义。构造函数的定义没有返回类型,因为您不需要返回任何内容。从定义的角度来看,最接近返回类型的东西是无效的。

构造函数没有返回类型的void有两个原因。第一个允许定义与类相同名称的方法,因为调用站点是明确的,缺少返回类型使定义明确无误。第二个是避免在呼叫网站上对返回类型造成混淆,new Foo()“返回”Foo*,而不是void

正如其他人所说的那样,构造函数不是创建实际对象(在别处处理),而是创建(或初始化)对象的属性(设置不变量和处理默认值)。