首页HTML开始的地方

C++问题集

const

函数名后,加const使类的成员函数,不能修改类内成员。mutable可以突破const限制!
在函数后面加const只能在类的成员函数中实现!普通的函数是无法进行这样的操作的!
void test() const
{
  cout<<"This is test function!"<<endl;  
}

表示函数不可以修改类中的成员,相当于这个函数是一个只读函数!

一旦我们想要改变类成员的值便会报错!这样的好处在于:1、提高了代码的可读性,别人看到你这个就知道你这个函数没有改变类成员。2、提高代码的可靠性,即前面说的若想改变改变则会报错!
class Person
{
public:

  void test const
  {
    cout<<"This is test function!"<<endl;
  }

  int age;
}
但修改会报错
class Person
{
public:

  void test const
  {
    cout<<"This is test function!"<<endl;
    age++;
  }

  int age;
}
突破限制
class Person
{
public:

  void test const
  {
    cout<<"This is test function!"<<endl;
    age++;
  }

  mutable int age;
}

 

 函数调用方式

__stdcall函数采用从右到左的压栈方式,自己在退出时清空堆栈。通常用于Win32 Api中。

VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。PASCAL,已被定义为__stdcall。

 

_cdecl按从右至左的顺序压参数入栈,由【调用者】把参数弹出栈。是MFC缺省调用约定。

VC将函数编译后会在函数名前面加上下划线前缀。_cdecl是C和C++程序的缺省调用方式。

 

__fastcall通过寄存器来传送参数的(实际上,它用ECX和EDX传送前两个双字(DWORD)或更小的参数,剩下的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的内存栈),

VC将函数编译后会在函数名前面加上"@"前缀,在函数名后加上"@"和参数的字节数。它的主要特点就是快

 

thiscall仅仅应用于"C++"成员函数。this指针存放于CX寄存器,参数从右到左压。thiscall不是关键词,因此不能被程序员指定。

 

关键字 __stdcall、__cdecl和__fastcall可以直接加在要输出的函数前,也可以在编译环境的Setting.../C/C++ /Code Generation项选择。当加在输出函数前的关键字与编译环境中的选择不同时,直接加在输出函数前的关键字有效。它们对应的命令行参数分别为/Gz、/Gd和/Gr。缺省状态为/Gd,即__cdecl。

posted @ 2023-02-23 20:37  csnotes  阅读(19)  评论(0编辑  收藏  举报

这是页脚html