c++ - 为什么允许内联函数操作私有(private)成员变量?

标签 c++ inline private-members

假设我有一个带有两个内联函数的类:

class Class {
public:
   void numberFunc();
   int getNumber() { return number; }
private:
   int number;
};

inline void Class::numberFunc()
{
   number = 1937;
}

我实例化该类并调用该类中的两个函数:

int main() {
   Class cls;
   cls.numberFunc();
   cout << cls.getNumber() << endl;
   return 0;
}

我知道这两个内联函数仍然是该类的成员,但我的理解也是内联函数体内的代码只是插入到它被调用的地方。看来,由于该插入,我不应该能够直接访问成员变量 number因为,据我所知,main() 中的代码编译器看起来像:

main() {
   Class cls;
   cls.number = 1937;
   cout << cls.number << endl;
   return 0;
}

有人可以向我解释为什么我仍然能够访问那些私有(private)成员,或者纠正我对内联函数的理解吗?我知道编译器可以选择忽略 inline在某些功能上;这就是这里发生的事情吗?

输出:

1937

最佳答案

访问类的私有(private)成员的规则由编译器在您的 C++ 代码上强制执行。这些规则并不直接适用于编译器的输出,即计算机执行的代码。

关于c++ - 为什么允许内联函数操作私有(private)成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12557661/

相关文章:

Java - 有一个方法可以将私有(private)字段值传递给另一个类的方法吗?

c#-4.0 - 使用委托(delegate)调用私有(private)方法

.net - MSIL - 如何从 MSIL 调用私有(private)方法?

c++ - boost::单位::数量 "incomplete type"错误

C++ 内联字符串格式化和数字转换

c++ - 无法增加静态变量

c++ - 如果在 C++ 中没有先前声明的情况下定义自由函数,是否会隐式内联?

html - 如何使用 html/css 显示内联和居中的多个图像?

c++ - cout 输入模板

c++ - 有没有办法将 vector<unsigned char> 插入 postgresql 表,具有 bytea 属性,没有 UTF8 编码错误?