Aus*_*ore 6 c++ inline private-members
假设我有一个具有两个内联函数的类:
class Class {
public:
void numberFunc();
int getNumber() { return number; }
private:
int number;
};
inline void Class::numberFunc()
{
number = 1937;
}
Run Code Online (Sandbox Code Playgroud)
我实例化该类,并调用该类中的两个函数:
int main() {
Class cls;
cls.numberFunc();
cout << cls.getNumber() << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道内联函数仍然是类的成员,但我也理解,内联函数体内的代码只是插入它被调用的位置.看来,作为插入的结果,我不能直接访问成员变量number
,因为据我所知,main()
编译器中的代码如下所示:
main() {
Class cls;
cls.number = 1937;
cout << cls.number << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释为什么我仍然可以访问这些私人成员,或者纠正我对内联函数的理解?我知道编译器可以选择忽略inline
某些函数; 那是怎么回事?
输出:
1937年
该 inline
关键字是否意味着程序员认为,编译器可能,如果这样想的地方调用插入代码.编译器也可以在没有关键字的情况下内联其他函数.编译器可能认为程序员是傻瓜而忽略关键字而不是内联.它完全由C++标准.
内联成员函数是非常正常的成员函数.没有其他特权或限制.
内联不会导致函数由多个编译单元定义的错误(包括定义内联函数的头文件).这可能是人们编写内联函数的一个原因.
在private
访问说明符的类(程序员)的用户的限制,而不是编译器.只要程序的可观察行为相同,编译器就可以做任何想做的事情.