现在我一直在学习内联函数,我遇到了一些让我很困惑的事情
看这堂课
class Nebla{
private:
int x;
public:
inline void set(int y){x=y;}
inline void print(){cout<<x<<endl;}
};
它有一个私有数据成员:int x;
它有两个公共的内联函数:set(int y)
和print()
现在,由于这两个函数是内联的,所以当它们被调用时,编译器会将函数调用替换为函数的内容。
所以如果我这样做
Nebla n;
n.set(1);
n.print();
由于这两个函数是内联的,它应该是等价的:
Nebla n;
n.x=1;
cout<<n.x<<endl;
但等一下,x
是私人的。因此,这不应该工作。
但它确实如此,我很困惑为什么它确实有效,尽管通常你不能从课堂外访问私人成员?
谁能解释一下为什么您可以从类外部访问私有数据成员,但是当成员函数是内联的时,尽管内联只是将函数调用替换为函数的内容,但它可以吗?