2013-05-05 98 views

回答

5

名称的链接与其定义的位置或方式无关,只与名称可能用于引用特定对象或函数的位置无关。

声明一个函数内联不会强制它被内联;它只是放松一个定义规则以允许在其使用的每个翻译单元中定义(并且需要在其所称的每个翻译单元中有一个定义),以使其更易于内联。它不会阻止生成非内联版本,如果编译器决定不内联某个特定的调用,或者如果您获取它的地址。

所以“外部连接”和“内联”不是唯一的; “外部链接”意味着可以在任何翻译单元中引用该功能,“内嵌”意味着它必须在任何调用它的翻译单元中定义。

0

也许更好的表达方式是“如果需要连接,它将是外部的”。这意味着,如果你使用内联函数的地址,该地址将在外部可见(不是模块的静态地址)。

0

内联函数不一定以内联方式扩展。当它们不是时,语言定义要求只有一个函数副本。

0

内联函数通常与其他编译单元“可链接”。它们不会显示为内联函数。在编译的文件中有一个函数的副本。这适用于免费的内联函数。类成员函数通常不会获得“非内联”使用函数的副本。好的链接器也会将代码作为“死代码”删除,如果它从未被重新引用。