成员函数的外部联动是如何发生的?

问题描述 投票:0回答:1

我有两个翻译单元,代码如下:

//Translation Unit A
struct A {
    void f(int a) {};
};
//Translation Unit B
void f(int j);
int main()
{
    f(4);
}

translation unit A 
中,
struct A
属于全局作用域,因此具有外部链接,因此成员函数名
f
也具有外部链接。在第二个
translation unit
中,声明的函数
f
也具有外部链接。根据 C++ 草案 ISO N°4901(2021) 的外部链接定义:

当名称具有外部链接时,它所表示的实体可以是 其他翻译单位范围内的名称或来自 同一翻译单元的其他范围。

当我运行代码时,尽管出现链接错误。为什么会出现这种情况?这种联系是如何发生的?

c++ linkage
1个回答
1
投票

有两个功能

  • A::foo
    在 TU A 中声明,并且在那里也有
    inline
    定义。
  • ::foo
    TU B 中仅声明,未定义。

foo
中的
main
符号解析为后者,因为链接器无法找到其定义,因此会发出错误。

© www.soinside.com 2019 - 2024. All rights reserved.