【问题标题】:Is a constructor exactly the same as an initializer?构造函数和初始化函数完全一样吗?
【发布时间】:2012-04-23 02:08:21
【问题描述】:

在 C++ 或 Objective-C 中,术语“构造器”是否与“初始化器”完全相同?

原因是,每当我看到“构造函数”这个词时,感觉有些模糊,因为也感觉构造函数负责在内存空间中设置对象,而实际上构造函数只是“初始化” .所以“构造器”这个词可能会让人感到困惑,因为它感觉像是 alloc 和 init 的组合,而初始化器这个词非常清楚,它只是设置值。

上述说法大体上正确吗?

【问题讨论】:

    标签: oop constructor initializer


    【解决方案1】:

    不,它们不一样。

    initializer 是 C++ 语法的一部分,而不是函数。例如:

    std::string s = "abcd";
    

    初始化器是= "abcd"

    当变量定义中存在初始化器时,它提供将传递给构造函数的参数。

    您可以在标准的第 8.5 节中阅读更多相关信息。

    【讨论】:

      【解决方案2】:

      构造函数保证在分配时运行,并用于将对象初始化为某些已定义的状态。在 C++ 中,我们称之为RAII。正如您所说,初始化程序只是“设置值”或“初始化对象”,不需要在分配时运行。

      【讨论】:

      • 所以当我们说我们编写 C++ 类的构造函数时,我们只是在编写构造函数工作的“第 2 部分”(初始化)? (第 1 部分已自动为您完成)
      • 如果它可以帮助你这样想,那么是的。当您创建类 foo 或 struct bar 的对象(结构实际上是 C++ 中的类)时,会自动调用构造函数。
      【解决方案3】:

      构造函数需要一些原始存储,并在那里构造一个对象。

      初始化器是用于初始化某些变量的值。

      虽然您可能有一个观点,即所谓的构造函数可以 被称为初始化程序,但我怀疑它是否真的被考虑用于 C++ 或 Objective-C。在 C++ 或 Objective C 出现之前,“Initializer”已经在 C 中具有目前公认的含义。由于术语在 C 中已经广为人知,我无法想象有人试图将它重新定义为在基于 C 的语言中表示完全不同的东西。

      【讨论】:

        猜你喜欢
        • 2019-10-07
        • 1970-01-01
        • 1970-01-01
        • 2021-05-15
        • 1970-01-01
        • 1970-01-01
        • 2020-08-10
        • 1970-01-01
        • 2018-06-20
        相关资源
        最近更新 更多