【问题标题】:Confusion about the difference between declarations and definitions in C++关于 C++ 中声明和定义之间区别的混淆
【发布时间】:2019-03-18 09:17:25
【问题描述】:

我很困惑。在 Bjarne Stroustrup 的书“使用 C++ 的编程原理和实践”的第 3.8 部分中,他谈到了对象的类型。我引用以下列表:

  • 类型定义了一组可能的值和一组操作(针对一个对象)。
  • object 是一些保存给定类型值的内存。
  • 是内存中根据类型解释的一组位。
  • 变量是一个命名对象。
  • 声明是为对象命名的语句。
  • 定义是为对象留出内存的声明。

根据他对定义的解释,我了解到在声明期间没有为对象留出任何内存。然而,Bjarne 提到 declaration 涉及对象的命名这一事实表明,内存实际上是被搁置的,因为 objects 被解释为是

一些存储给定类型值的内存。

有人可以澄清一下吗?

【问题讨论】:

标签: c++


【解决方案1】:

C++ 的复杂性之一是编译是在“翻译单元”中完成的(看不到整个程序)。每个翻译单元包含在其他翻译单元中定义的一些部分的声明和一些其他部分的定义。声明提供了足够的信息,以便能够在链接器解析地址后生成使用声明部分的代码。

一个对象或非内联函数只能在一个程序中定义,但可以有多个声明。

由于模板和 C++ 在链接时可以做的一些魔法(例如内联函数中的静态变量),事情确实比这更复杂。

声明说“某处有这样的对象/函数”,定义说“制作这样的对象/函数”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 2010-11-24
    • 2022-01-13
    • 1970-01-01
    • 2020-06-07
    • 2014-03-15
    • 1970-01-01
    相关资源
    最近更新 更多