我现在正在学习关于内联函数的知识,遇到一些让我困惑的事情。
看这个类:
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
是私有的。因此,这应该不起作用。
但它确实起作用了,我很困惑为什么它会起作用,虽然通常你不能从类外访问私有成员?
有人能解释一下为什么你可以从类外访问私有数据成员,但当成员函数是内联时,它可以,尽管内联只是用函数内容替换函数调用吗?
n.x=1;
。你的假设是错误的。 - Mahesh