首页 > 解决方案 > 成员函数和成员变量在符号方面有什么区别?

问题描述

我正在学习__attribute__ ((visibility("default")))用于符号导出

// a.cpp
class A
{
public:
     __attribute__ ((visibility("default"))) void func() {;};
     __attribute__ ((visibility("default"))) int cnt;
};

但是我遇到了以下问题

# g++ -c a.cpp 
a.cpp:5:50: warning: ‘visibility’ attribute ignored [-Wattributes]
      __attribute__ ((visibility("default"))) int cnt;
                                                  ^~~

成员函数和成员变量有什么区别?为什么一个可以导出符号而另一个不能?

标签: c++shared-librariessymbolssymlink

解决方案


成员函数实际上只是具有特殊签名以容纳隐藏this参数的普通函数。因此,您可以像其他全局函数一样将可见性属性附加到它们。

相反,成员变量不对应于全局实体——它们只是类对象占用的内存中偏移量的符号名称。因此,将可见性附加到它们是没有意义的。


推荐阅读