zoukankan      html  css  js  c++  java
  • C++学习笔记一

    在程序中,调用函数时,内存会从一个地址跳到一个特定的地址上,当函数执行完后,在返回。

    内联函数则可以不用跳来跳去,但有点消耗空间,它会直接在函数后面去执行函数里的代码,但会产生函数的副本。定义内联函数的方法是 inline 并且一般是函数只有一行,多行不推荐使用。内联函数跟宏有点类似,但又很不相同,你用宏定义的求x^2函数,是不能放表达式的,而内联函数时可以的,当然这个是可以解决的。但宏不能按值传递。即使使用新的定义,仍会把C递增两次(拿x*x来说,宏会传递两次x的值) ,而内联只会递增一次。

     

    变量引用,可以将让一个值拥有两个变量的名称,例如int rats; int & rodents=rats;这样可以rodents和rats是一样的值,并且当你rodents加1的时候,rats也会加1,当你输出他们的两个函数的地址会发现地址是一模一样的。这根指针有点像但又不是彻底的像,变量引用必须在定义的时候就赋值,而且一旦引用了,就绝对不能再引用新的变量(很忠诚).

     

    将引用作为函数参数时,可以对其直接进行值的修改,但是用了const后就无法修改了,并且如果实参与引用的参数不匹配,则C++会生成临时变量,什么叫临时变量呢?临时变量就是当一个函数中其中一个参数时double &a,而你传的参数时long a=4;由于形参和实参的类型不同,所以在函数调用时,会生成一个匿名变量来接收long a=4的变量,然后在传入函数里面。但这样会导致,a的值无法被函数改变,所以有点类似值传递效果了。唯一解决的方式是进制创建临时变量。因此,如果声明将引用制定为const,C++将在必要时生成临时变量。

    int & accumulate(int & a,const int & b) {return a}可以构造如下语句:

    accumulate(a,b)=c;因为accumulate返回的是引用,所以该语句等于accumulate(a,b);a=c;

    为何上面这条语句不会报错呢?常规函数(非引用)的返回值是右值(=号右边的值),这是因为这种返回值位于临时内存单元中,运行到下一跳语句时,它们(返回值)可能不在存在了。

    而左式中,必须标识一个可修改的内存块。

    由于返回函数终止时,会导致里面的内存单元全部释放,而你的函数又是返回引用时,例如int & accumulate(int & a,const int & b) {int c;c=a;return c;}函数运行完毕后,c将不再存在,也就是说返回的值也没有了。解决方法可以使用参数来传递函数的引用,或者用new来分配新的存储空间,在返回。

     在函数中,把const值赋给非const值是非法的,非const赋给const是合法的

    ————————————————————————————————————————————————————

    使用模板<template>特定类型生成函数swap()的一个实例,叫模板实例,也就是template <int T>

    而用模板<template>不同类型生成函数swap的一个实例,叫隐式实例化, 也就是tempplate<class T>声明的却是个int类型的

    ————————————————————————————————————————————————————

     

     重载解析:对于函数重载、函数模板和函数模板重载,在什么时候用什么函数的过程叫做重载解析

    第一步:创建候选函数列表。其中包含与被调用函数的名称相同的函数和模板函数

    第二步:使用候选函数列表创建可行函数列表。这些都是参数数目正确的函数,为此有一个隐式转换序列,其中包括实参类型与相应的形参类型完全匹配的情况。例如,,使用float参数的函数调用可以将参数转换为double,从而与double形参匹配,而模板可以为float生成一个实例。

    第三步:确定是否有最佳的可行函数。如果有,则使用它,否则该函数调用出错。

  • 相关阅读:
    [LeetCode] 85. 最大矩形
    [LeetCode] 84. 柱状图中最大的矩形
    [LeetCode] 83. 删除排序链表中的重复元素
    [LeetCode] 81. 搜索旋转排序数组 II
    [LeetCode] 82. 删除排序链表中的重复元素 II
    [LeetCode] 80. 删除排序数组中的重复项 II
    [LeetCode] 79. 单词搜索
    [LeetCode] 77. 组合
    转:快乐Node码农的十个习惯
    转:zookeeper3.4.5安装笔记
  • 原文地址:https://www.cnblogs.com/pppyyyzzz/p/12015735.html
Copyright © 2011-2022 走看看