修饰符不可用于静态成员函数
const用于后置修饰函数时只用于限定成员函数,意味着将被修饰的成员函数的隐式参数——this指针由原来的Class* const变为const Class* const类型,使得在该成员函数内不能修改成员属性,除非该属性被mutable修饰。
而static类函数并没有隐式的this指针,因为其本质上还是属于C函数——满足__cdecl调用协定。
而成员函数被称为__thiscall,带有隐式的this指针参数。
由此想到的:
_thiscall 和 _cdecl 的区别,于是找到了这样的一篇好文,这里我们只保留其结论部分:
在C或C++语言调用中默认的函数修饰_cdecl,由主调用函数进行参数压栈并且恢复堆栈,实参的压栈顺序是从右到左,最后由主调函数进行堆栈恢复。由于主调用函数管理堆栈,所以可以实现变参函数。另外,命名修饰方法是在函数前加一个下划 线(_).
_stdcall在主调用函数中负责压栈,在被调用函数中负责弹出堆栈中的参数,并且负责恢复堆栈。因此不能实现变参函数,参数传递是从右到左。另外,命 名修饰方法是在函数前加一个下划线(_),在函数名后有符号(@),在@后面紧跟参数列表中的参数所占字节数(10进制),如:void Input(int &m,int &n),被修饰成:_Input@8 对于大多数api函数以及窗口消息处理函数皆用CALLBACK,所以调用前,主调函数会先压栈,然后api函数自己恢复堆栈。
_cdecl是C和C++程序的缺省调用方式。每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大。
thiscall仅仅应用于“C++”成员函数。this指针存放于CX寄存器,参数从右到左压。thiscall不是关键词,因此不能被程序员指定。