C++重新学

2 篇文章 0 订阅

C/C++函数调用方式/压栈方式:__stdcall、__cdecl、__fastcall    
 //如果不显式指定,_cdecl是C和C++程序的缺省调用方式    
  __stdcall    : Windows API默认的函数调用协议
  __cdecl   : C/C++默认的函数调用协议
  __fastcall : 适用于对性能要求较高的场合
 参考:https://blog.csdn.net/sunriver2000/article/details/84913380

C++中的函数也必须先声明后实现,或在main函数的前面/上部定义,才能在main中使用.

前置声明:先声明后定义,跟C语言一样,类/类型先声明:class XXX;

C++中的默认访问权限:
   class 结构中.若没有指定访问类型,则为private
   struct结构中,未指定的访问类型为public

Windows下的类型VC或MFC或Win32: 常用类型
  DWORD : unsigned long, 32bit/4个字节,双字节类型
  char :ANSI字符串,可用字符串处理函数strcat( ),strcpy( ), strlen( )等以str打头的函数。
  wchar_t : 是Unicode字符的数据类型,它的实际定义为:typedef unsigned short wchar_t;
     对应的字符串处理函数:wcscat(),wcscpy(),wcslen()等以wcs打头的函数。
  TCHAR:其实是wchar_t或者char,主要看是否定义UNICODE。
  ACHAR: AUTODESK公司在adachar.h 头文件中定义的,当定义了UNICODE时为wchar_t
WCHAR,CHAR,TCHAR的实际关系:
  typedef unsigned short wchar_t;
  #
  ifdef UNICODE    
      typedef wchar_t TCHAR;    
  #else    
      typedef unsigned char TCHAR;    
  #endif       
  typedef unsigned char CHAR;     
  typedef unsigned wchar_t WCHAR;
 

  LPCTSTR : 表示一个指向常固定地址的可以根据一些宏定义改变语义的字符串
  LPCSTR : 只能是一个ANSI字符串,在程序中我们大部分时间要使用带T的类型定义
  L表示long指针,这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中,    
       long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。
  P表示这是一个指针
  C表示是一个常量
  T表示在Win32环境中,有一个_T宏,这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。
  STR表示这个变量是一个字符串

命名空间:
 1.命名空间可以嵌套
 2.同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中
 3.使用using将命名空间中的成员引入,如:
     using N2::b;
 4.使用using namespace把命名空间名称引入,如:
     using namespace N1;

函数重载在同一作用域中声明几个功能类似的同名函数,但参数个数或类型或顺序     

extern "C" : 在C++工程中可能需要将某些函数按照C的风格来编译,在函数前加extern "C",意思是告诉编译器,将该函数按照C语言规则来编译.

引用(reference):是C++对C的一个重要扩充。变量的引用就是变量的别名,因此引用又称别名。
引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间
  格式: 类型& 引用变量名(对象名) = 引用实体
注意:1.引用类型必须和引用实体是同种类型的;
      2.引用在定义时必须初始化 
      3.一个变量可以有多个引用;
      4.引用一旦引用一个实体,再不能引用其他实体;
      5.常引用:引用类型必须和引用实体必须同类型,但还不能保证能够引用成功,这里要注意可否可以修改的问题
       总结:将不可修改的量用可读可写的量来引用是不可以的,但是反过来是可以的,将可读可写的量用只可读的量来;int转为double存在隐式类型的提升,而在提升的过程中系统会创建一个常量区来存放a类型提升后的结果
      类型提升/降低,需要使用const来接收:
      int a = 10;a = a; //编译不通过
      //const double&ra = a;
      const double &ra = a;
      
      double d = 12.51;//12.34;
      //int &rd = d;  //编译时出错,因为类型不同
      const int&rd = d; //类型降级,编译器会警告可能数据精度丢失
      cout << rd << endl; //12(是取整,去掉小数部分)
      
      6.引用的使用场景:1.引用作参数,否则在C语言中只能使用指针来做为参数实现功能
                       2.引用作返回值 :https://blog.csdn.net/weixin_44814867/article/details/120313636?share_token=5581a02b-4040-4819-8b61-f5e849c776e6

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值