zoukankan      html  css  js  c++  java
  • C++ primer 5th 第六章笔记

    总结:
    
        6.1 基础  :
            数组 和 函数不能充当返回值, 可以使用指向他们的指针.
            自动变量: 生存周期 = 作用域
            局部静态变量: 生存周期 > 作用域
          	函数声明 = 函数原型
    
         6.2 参数传递:
            值传递: 变量,指针,函数(传值调用)
            引用传递 : 避免大量拷贝,const 修饰能扩大其类型容纳范围。
            
            形参的顶层const会被忽略掉.
            
            数组当作参数会被退化成指针 [ 指向下一维度数组指针]
                解决方式:
                      1.使用整数形参 说明其退化前的维度 
                      2.使用数组引用方式传递, 但是就只能传递固定维度的数组了
            
            可变参数列表:
                1.initializer_list :
                    内部全是const, 且拷贝赋值共享元素.
                2.可变参数模板
                3.C接口的 ... , 此时应该使用C支持的数据类型当作实际参数.
    
         6.3 return : 
             使用返回值初始化一个临时量。
             
             C++11规定可以返回 {}, 只要接受的数据能接受 [ 返回类型不能是数组类型]
            
             返回指向数组的指针的方式:[引用也适用]
             1.类型别名:
                using arrT = int[10];
                arrT *func(int);
             
             2.不使用类型别名:
                int (*func(int))[10];
                
             3.尾置返回类型[C++11]
                auto func()->int(*)[10];
             4.decltype方式:
               int a[10];
               decltype(a) *func();
         
          6.4 函数重载:
             返回类型, 顶层const不能充当重载的条件。
             
             const_cast 可以让非常量版本函数调用 常量版本的函数。[指针 和 引用类型形参]
    
          6.5 特殊的语言特性:
            	默认实参:
               		 书写在都文件当中,可多次定义.
            	内联函数:
                		定义在头文件, 可展开, 无复杂控制语句的函数
          		 constexpr 函数:
                		参数类型 和 返回值都必须是字面值类型。
               		 函数体只能有一条return 语句
               		 返回值是否是constexpr 看参数。
            	调试帮助:
             		   cassert 头文件中的宏, 以及__func__ 和 __FILE__,__TIME__,
    __LINE__,__TIME__ 等预处理变量
         6.6 函数匹配:
               候选函数集合 : 名字 和 可见性来筛选
               可行函数集合 : 参数的数量 和 可行的类型匹配筛选
               最佳匹配: 每单个参数来看, 如果每个参数的最佳匹配相同就有最佳匹配, 否则ambiguous [
               有一套等级划分来决定类型匹配的优劣 ]
         6.7 函数指针:
                参数是函数指针:
                        void func(int f(int,int))
                        void func(int (*pf)(int,int)) //等价于上
                返回函数的指针:
                       别名方式: 
                           	   using funcType = int (int, int);
                           	   funcType * func(); 
                       不用别名方式             
                           	    int (*func())(int, int){}
                       尾巴置类型放复杂类型:
                           	    auto func() -> int (*)(int, int);
    
  • 相关阅读:
    深入理解java异常处理机制
    i2c总线
    运行时类型识别(RTTI)
    bcg界面库总结
    c++ 虚函数表
    宽字符,宽字符串
    c++异常处理
    内存管理
    c++中使用联合体
    MFC自定义消息
  • 原文地址:https://www.cnblogs.com/Geek-Z/p/10087683.html
Copyright © 2011-2022 走看看