c++复合类型

放了个长假,知识已经疏忽了很多。我们一起来接着学习吧:

1、赋值改变的是等号左侧的对象。

       pi = & vai ; // pi的值被改变,现在指向了ival

2、可以使用相等和不相等操作符来比较类型相同的合法指针。

3、关于void* 指针:

   (1)、可以存放任意对象的地址;

   (2)、可以用来和别的指针比较、作为函数的输入或输出,或者赋给另外一个void*指针;

   (3)、不能直接操作void* 指针所指的对象;

    *(4)、总的来说,void*仅仅是指内存空间。没有办法访问内存空间的对象。

4、存在指针的引用,但不存在引用的指针。(因为引用不是指针,没有分配内存)

5、面对一条比较复杂的指针或者引用的声明语句时,从右向左阅读有助于搞清楚它的真实含义。

6、因为const对象创建后值不能再改变,所以创建该对象需要初始化。

*7、const对象默认状态下,只在文件内有效,当在多个文件中定义了同名的const变量时等同于分别定义了独立的变量。

8、可以通过在变量地定义之前添加extern关键字,在多个文件之间共享const对象。

9、常量引用是对常量的引用:

      cosnt  int  ci  = 1024;

10、auto 会自动忽略顶层的const;

     

     const int  &r1=ci;

10、引用的类型须和引用对象的类型一致。

11、临时量对象:编译器暂存表达式的求值结果时临时创建的一个未命名的对象。

12、对const的引用可能引用一个非const的对象:

       int  i = 42;

      int  & r1 = i;

      const int & r2 = i;

     r1=0;

     r2=0;//错误,r2是一个常量引用

13、关于顶层和底层const:

     (1)顶层const:指针本身是一个常量;(更一般的顶层是指const可以表示任意的对象是常量)

     (2)底层const:指针所指的对象是一个常量。(底层则与指针和引用等符合类型的基本类型有关)

14、常量表达式:值不会改变,并且在编译过程就能得到计算结果的表达式。一个对象是不是常量表达式取决于它的数据类型和初始值。

15、关键字constexpr:声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化。

       constexpr   int   mf =20;

      constexpr   int limit = mf+1;

     constexpr    int sz= size(); //只有size是一个constexpr函数时才是一个正确的声明语句。

16、一个constexpr指针的初始值必须是nullptr或者0,或者是存储于某个固定地址中的对象。

17、定义在函数体外部的指针地址不变可以用来初始化constexpr指针,函数内部定义的指针由于地址不是固定的不能用于初始化constexpr指针。

18、类别名:某种类型的同义词:

     typedef  double wages;   // wages是double的同义词

19、新标准定义的新方法: using  SI = sales_item ;  //  SI 是sales_item 的同义词

20、类型别名和类型的名字等价,只要是类型名可以出现的地方,就能使用类型别名。

21、auto类型说明符:

 (1)、auto通过初始值来推断变量地类型;

 (2)、auto定义的变量必须有初始值;

22、使用auto在一条语句中声明多个变量时,所有变量地初始基本数据需要是相同的。

    auto  i= 0 , * p = &i;//i是整数,p是整数指针

23、 auto会自动忽略顶层的const:

       const   int ci  = i , & cr  = ci;

       auto b= ci; //b是一个整数(ci的顶层特性被忽略)

       auto  e = & ci ;// e是一个指向整数常量的指针(对常量对象取地址是一种底层const)

      如果需要推断出的类型是一个顶层const,则需明确指明。

   auto & g = ci; //g是一个整型常量引用,绑定到ci

  auto & h =32; // 错误,不能为非常量引用绑定字面值

  const   auto & g =32;//正确,可以为常量引用绑定字面值

要在一条语句中定义多个变量,切记符号&和符号*只属于某个声明,而非基本类型的一部分,因此初始值必须是同一种类型。

    auto  k  = ci , & l =i;

   auto & n = i, * p2= &ci ; //错误,i 是int 而 p2是 const int

24、decltype关键字:选择并返回操作数的数据类型。

25、 int i = 42, * p = & i ,& r= i;

decltype(r+0) b;//正确,b是一个未初始化的int

decltype(*p) c ; // 错误,c是一个int & ,未初始化

*** decltype(表达式):如果表达式的内容是解除引用操作,则decltype将得到引用类型;如果是加上括号的变量结果也是引用类型。

decltype((variable))的结果永远是引用。

26、一般来说最好不要把类的定义和对象的定义放在一起。

  错误示范:  struct Sales_data {   }  accum , trans , * salesptr;

27、struct是一个只包含数据类型的类。

28、头文件通常包含那些只被定义一次的实体。

29、确保头文件多次被包含仍能安全工作的技术是预处理器。

30、预处理功能#include :用指定头文件的内容代替#include。

31、使用#ifndef  -------  #define ------- #endif  可以避免头文件多次包含的错误。(头文件保护符)

32、定义:为某一特定类型的变量申请存储空间,可以选择初始化该变量。名字必须在定义(包含初始化)或声明后才能使用。

33、试图访问未初始化变量的值,将引发未定义行为。

让我们一起在心里默念:宁静致远,静笃归心!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值