类和类成员的链接
Linkage of Classes and Class members
以下是我知道的外部和内部链接的定义。
具有内部链接:可以在翻译单元内使用。
具有外部链接:存在于特定翻译单元之外,可通过整个程序访问。
这是一个例子:
假设我有一个名为 A.h 的头文件,我在其中声明类成员和成员方法(构造函数、析构函数......在名为 A.cpp 的 cpp 文件中,我定义了这些方法。
在包含头文件的主文件中.cpp我使用类 A 的构造函数创建了一个类型 A 的对象 a。
现在假设我将 A 的类成员声明为私有或受保护,我无法通过我的主文件访问它们.cpp。如果我宣布它们是公开的,我可以。
这是我的问题:当我声明 A 的类成员是私有的或受保护的时,说他们有内部联系有意义吗?
我对链接实际上代表什么感到非常困惑,并且在谈论内部或外部链接时是可能的。
现在假设我将 A 的类成员声明为私有或受保护,我无法通过我的主文件访问它们.cpp。
是的,你可以。只需从A.cpp
中获取其中一个定义并将它们移动到main.cpp
.该定义将能够访问A
的私有成员。这是完全合法和有效的C++。
访问控制(公共/私有/等(确定哪个代码可以命名该类的成员。它们不控制定义这些成员的位置。也就是说,访问控制可以根据名称出现的代码的特定上下文隐藏名称,而不是显示名称的文件。
链接(部分(控制名称在整个程序中的可见性,相对于声明/定义该名称的特定翻译单元(又名:源文件(。Linkage 非常关心名称出现在哪个文件中,相对于该名称的声明/定义位置。
话虽如此,某种类型的成员根本没有链接。您可以认为它们与类型本身具有相同的链接。链接适用于命名空间/全局范围的声明和定义,而不是类成员。
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 类和类成员的链接
- 指向(数据)成员的指针作为非类型模板参数,例如具有自动存储持续时间/无链接
- C++ - 使用 std::list,如何打印对象的私有成员的链接列表?
- C++标准是否定义了结构中成员函数的函数内定义是否必须具有静态链接?
- 单独库中的类成员函数定义和链接依赖项
- emplace_back会导致静态 constexpr 成员上出现链接错误
- 类中常量成员函数的 c++ 链接错误
- C :(不重复)积分静态成员初始化(不仅是声明!),导致链接器错误,原因
- 获取 constexpr 全局变量(不是静态成员)的链接器符号
- 使用 <filesystem> C++17 中的成员的链接错误
- gcc 和 clang 中 constexpr 静态成员变量的链接器错误
- (C++)(链接错误)模板成员函数上未解析的外部
- 静态成员函数访问静态私有变量时的链接器错误
- 关于在 ndk r15 中的类中初始化的静态成员的不满意链接错误
- 为什么添加静态数据成员会导致链接器失败
- 类模板的成员函数模板找不到定义,尽管存在显式实例化。不链接
- C++ 使用 .chain().method() 链接成员函数 vers ->chained(0->method()
- 静态成员初始化链接错误
- 链接器为某些上下文中使用的集成静态常量成员提供错误"undefined symbol"