在《C++编程思想》一书中提到了类型安全链接,但并不是很清楚。能否有人详细解释一下呢?
谢谢。
类型安全链接在链接时强制传递正确的参数数量和类型。
例如,在C中,您可以将库函数定义为接受int类型的参数,但通过一系列纰漏,您可以传递一个字符串。
C++通过强制使用函数原型并使用名称重整来避免这种错误以实现类型安全链接。来源
让我们通过一个例子来看看
//:Def.cpp
void f(int) {}
//Use.cpp
// Function misdeclaration
void f(char);
int main() {
f(1); // Causes a linker error
}
这个函数实际上是 f(int)
,但编译器并不知道这一点,因为它被显式声明为 f(char)。在 C 中,编译器会成功,链接器也会成功,但在 C++ 中则不然。
这里还有一个非常详细的解释:http://www.hpc.unimelb.edu.au/nec/g1af05e/chap9.html
double
的函数,但意外传递了一个complex
。在C++中,由于具有类型安全的链接,这种情况是不可能发生的。有关参考,请查看C ++的类型安全链接。
编辑总结:C++使用名称重载。这也使函数重载成为可能,其中函数签名必须是唯一的。