关于C ++中的声明和定义之间的区别的困惑

时间:2019-03-18 09:17:25

标签: c++

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

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

从他对定义的解释中,我了解到在声明期间没有为对象留出任何内存。但是,Bjarne提到 declaration 涉及对象的命名这一事实表明,实际上已经预留了内存,因为 objects 被解释为

  

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

有人可以澄清吗?

1 个答案:

答案 0 :(得分:2)

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

程序中只允许对一个对象或非内联函数进行一个定义,但是可以有多个声明。

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

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