【问题标题】:Does the order of declaring functions and methods in C++ matter在 C++ 中声明函数和方法的顺序是否重要
【发布时间】:2015-07-27 20:33:19
【问题描述】:

在 C 语言中,当您在声明之前使用函数时,编译器假定它不带参数并返回和 int。
如果您的函数返回另一种类型或接受参数,则编译器会产生错误。
如果我创建一个稍后在代码中声明的类的对象,在 C++ 中也会发生同样的情况吗?

【问题讨论】:

  • 顺便说一句,自 C99 以来,隐式声明已失效(不受标准支持)。只是说。
  • Nope C++ 会很好并且不会引发错误,但是如果您在头文件中声明函数,则将头文件链接到 cpp 文件而不声明函数 C++ 会引发错误,有时可能会非常具有误导性
  • @Canvas 类定义必须在创建该类的实例之前可用。您不能“创建稍后在代码中声明的类的对象”。 (除非已经定义,在这种情况下不需要声明。)
  • @juanchopanza 先生,我不是 C++ 人,所以如果您对 C.1.4 补充一点,C++11,对我理解会有帮助。
  • @SouravGhosh 这同样适用于 C。如果没有该类型的定义,您无法实例化该类型。

标签: c++ class


【解决方案1】:

顺序很重要。如果你引用了一个没有声明的函数(只有签名和返回类型,没有实现),那么编译器会抛出一个错误。您的函数的定义可以等到链接时间。 AFAIK,C++ 中没有隐式声明。

通常您将函数的声明放在头文件中。传统上,翻译单元(通常是独立的源文件,例如 hello.cpp)导出的符号将通过类似名称的头文件(例如,hello.h)提供。然后在源文件中执行实现。然后每个翻译单元都可以包含来自其他翻译单元的头文件(例如other.h)。

每个翻译单元都被单独编译(即源文件,如hello.cpp;所有#include 预处理语句都被要包含的文件的实际内容替换)。在链接时,不同翻译单元中的功能实现链接在一起。如果此链接步骤失败,您仍然会遇到错误。

【讨论】:

    【解决方案2】:

    在 C++ 中,无论是类还是函数,都没有隐式声明。所以你的问题并不直接适用。

    如果您调用函数或创建给定类型的对象,则必须在第一次使用之前声明该函数/类型。函数不一定要定义。只有在实际实例化它们或将它们用作(成员)变量时才需要定义类。当只需要指向类的指针时,不需要声明,因为在实际对象的内存被分配或在对象上调用函数之前,前向声明就足够了。

    【讨论】:

    • 如果你想创建一个给定类型的对象,类型必须被定义。
    • 是的,但我认为应该是“完整定义”而不是“完整声明”,尽管只是“定义”就可以了。
    【解决方案3】:

    在早期的c++版本中,如果你定义了test(int a)函数,它会默认返回一个int类型的值。但是在c++成为标准之后,函数就会报错。可以在c++ Primerfunction chapter一书中找到介绍。

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 2019-12-11
      • 1970-01-01
      • 2016-10-05
      • 1970-01-01
      相关资源
      最近更新 更多