什么是C ++中所谓的“类型安全链接”?

时间:2015-01-19 13:26:50

标签: c++

在Thinking in C ++一书中,它提到了类型安全链接,但不是很清楚。有人可以详细解释一下吗? 提前谢谢。

2 个答案:

答案 0 :(得分:3)

Typesafe链接强制在链接时传递正确的参数数量和类型。

例如,在C中,您可以将库函数定义为采用int,但是通过一系列不幸事件,您可以将其传递给字符串。

C ++通过强制使用函数原型以及使用名称修改来强制执行类型安全链接来避免此类错误。Source

让我们看一个例子

//: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

答案 1 :(得分:1)

类型安全链接强制要求在链接时提供正确数量和类型的参数。作为一个反例,考虑C,你可以在其中定义一个double的函数,但是你不小心传递了complex。在C ++中,由于类型安全链接,这不可能发生。作为参考,请查看Type-Safe Linkage for C++

编辑包装:C ++使用名称修改。这也可以实现函数的重载,其中函数签名必须是唯一的。