我在头文件中添加了一堆函数,在 cpp 文件中添加了实现。但是,我忘记添加一个函数定义,代码仍然编译。这是为什么?如果我没有发现这个,会是什么行为?当我尝试运行代码时,它会抛出一些运行时异常吗?
在文件中声明函数而不实现它并不是错误——人们总是在头文件中这样做。
如果一个函数被调用并且不存在,它将在链接时被捕获。
如果不使用它,我认为声明通常不会为链接器创建“引用”,因此不会标记错误。
编辑 - 额外的想法: 我认为可能存在一种误解,即编译器希望声明类的头文件与类的实现之间存在一对一的对应关系。这是一个很好的做法,但编译器并不关心。对于编译器来说,将类的特定函数的实现放在第三个文件中是完全没问题的。这将是非常糟糕的风格,除非有充分的理由(比如实现文件变得不合理地长,或者某些部分需要为特定平台或其他东西拆分)。
但是,如果有人认为编译器将头文件和 .cpp 文件视为匹配对,我肯定会理解为什么他们会认为如果声明的内容没有实现,编译器应该有错误或警告。