可见组装才是平台相关的,之前的操作都与平台无关, 换句话说是编译前端和编译后端
一个类的成员变量修改了访问控制符,在另外一个文件被引用,是否必须编译修改的文件才能链接成功?
答案是不需要
例如我们有 abc.hpp abc.cpp 定义了一个class
class a {
public:
int a = 0;
};
在main.cpp 中有引用
int main(){
a a;
std::cout << a.a;
}
这样是可以编译成功
# 生成main.o abc.o
g++ -c main.cpp abc.cpp
# 链接
g++ -o main main.o abc.o
# 成功
然后修改public为private 重新编译abc
g++ -c abc.cpp
# 重新链接
g++ -o main main.o abc.o
#成功!且可以执行
但是重新编译main.cpp
g++ -c main.cpp
#失败,提示无法访问private成员
可见,访问权限是在编译期检查的, 编译成目标文件后,就不会去检查了
编译成目标文件或者库文件后, 不会再去检查权限位了, 运行时照样可以访问
原文:https://www.cnblogs.com/hustcpp/p/12375903.html