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实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1553 数字反转(升级版)
    8.4 确定两个日期之间的月份数或年数
    (Java实现) 洛谷 P1553 数字反转(升级版)
  • 原文地址:https://www.cnblogs.com/Geek-Z/p/10087683.html
Copyright © 2011-2022 走看看