12 November 2023

C++ 核心指南目录

“A .cpp file must include the header file(s) that defines its interface”

理由

这样做就允许编译器进行早起的一致性检查。

坏例子

// foo.h:
void foo(int);
int bar(long);
int foobar(int);

// foo.cpp:
void foo(int) { /* ... */ }
int bar(double) { /* ... */ }
double foobar(int);

在早起捕捉不到错误,只有在链接时,一个程序调用了 barfoobar 的时候才会报错。

例子

// foo.h:
void foo(int);
int bar(long);
int foobar(int);

// foo.cpp:
#include "foo.h"

void foo(int) { /* ... */ }
int bar(double) { /* ... */ }
double foobar(int);   // error: wrong return type

现在, foobar 的返回值错误在编译的时候就能立即捕捉到。但是 bar 的参数类型错误还不能马上捕捉到,因为有可能存在重载,但是链接时还是会捕获到的。不管怎么样,系统化的使用 .h 文件可以尽量提前捕捉到错误。