美文网首页
C++基础 2020-11-03

C++基础 2020-11-03

作者: 忻恆 | 来源:发表于2020-11-04 09:16 被阅读0次

    thread_local 存储类

    • 使用 thread_local 说明符声明的变量仅可在它在其创建的线程上访问
    • 变量在创建线程时创建,并在销毁线程时销毁
    • thread_local 说明符可以与 static 或 extern 合并
    • 每个线程都有其自己的变量副本

    位运算符

    • ^ : binary加
    • << : 向左移动指定的位数

    杂项运算符

    • sizeof : 返回变量的大小
    • , : 顺序执行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值
    • Cast : 强制转换运算符把一种数据类型转换为另一种数据类型。例如,int(2.2000) 将返回 2

    C++ 函数

    • 每个 C++ 程序都至少有一个函数,即主函数 main()
    • 可以把代码划分到不同的函数中
    • 函数声明告诉编译器函数的名称、返回类型和参数
    • C++ 标准库提供了大量的程序可以调用的内置函数。例如,函数 strcat() 用来连接两个字符串,函数 memcpy() 用来复制内存到另一个位置
    • 函数还有很多叫法,比如方法、子例程或程序
    • 向参数传递一个值,这个值被称为实际参数
    • 函数声明会告诉编译器函数名称及如何调用函数
    • 在函数声明中,参数的名称并不重要,只有参数的类型是必需的
    • 在一个源文件中定义函数且在另一个文件中调用函数时,函数声明是必需的。在这种情况下,您应该在调用函数的文件顶部声明函数

    函数参数

    • 如果函数要使用参数,则必须声明接受参数值的变量。这些变量称为函数的形式参数
    • 形式参数就像函数内的其他局部变量,在进入函数时被创建,退出函数时被销毁

    三种向函数传递参数的方式:

    • 传值调用 : 该方法把参数的实际值赋值给函数的形式参数。在这种情况下,修改函数内的形式参数对实际参数没有影响
    • 指针调用 : 该方法把参数的地址赋值给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数
    • 引用调用 : 该方法把参数的引用赋值给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数
    • 默认情况下,C++ 使用传值调用来传递参数

    参数的默认值

    • 可以为参数列表中后边的每一个参数指定默认值
    • 如果实际参数的值留空,则使用这个默认值
    • 在函数定义中使用赋值运算符来为参数赋值

    Lambda 函数与表达式

    • C++11 提供了对匿名函数的支持
    • Lambda 表达式把函数看作对象,比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值
    • [capture](parameters)->return-type{body}
    • [](int x, int y){ return x < y ; }
    • 在Lambda表达式内可以访问当前作用域的变量,这是Lambda表达式的闭包(Closure)行为
    • 与JavaScript闭包不同,C++变量传递有传值和传引用的区别,可以通过前面的[]来指定
    • [] // 沒有定义任何变量。使用未定义变量会引发错误
    • [x, &y] // x以传值方式传入(默认),y以引用方式传入
    • [&] // 任何被使用到的外部变量都隐式地以引用方式加以引用
    • [=] // 任何被使用到的外部变量都隐式地以传值方式加以引用
    • [&, x] // x显式地以传值方式加以引用。其余变量以引用方式加以引用
    • [=, &z] // z显式地以引用方式加以引用。其余变量以传值方式加以引用
    • 对于[=]或[&]的形式,lambda 表达式可以直接使用 this 指针。但是,对于[]的形式,如果要使用 this 指针,必须显式传入

    C++ 数学运算

    • 需要引用数学头文件 <cmath>
    • hypot(double, double); 返回两个参数的平方总和的平方根
    • rand(),该函数只返回一个伪随机数
    • 生成随机数之前必须先调用 srand() 函数
        // 设置种子 
        srand( (unsigned)time( NULL ) );
        cout<<rand();
    

    C++ 数组

    • 所有的数组都是由连续的内存位置组成
    • 最低的地址对应第一个元素,最高的地址对应最后一个元素
    • 省略掉了数组的大小,数组的大小则为初始化时元素的个数
    • C++ setw() 函数用于设置字段的宽度, n 表示宽度
    • 当后面紧跟着的输出字段长度小于 n 的时候,在该字段前面用空格补齐,当输出字段长度大于 n 时,全部整体输出
    • 可以 setfill() 配合使用设置其他字符填充

    多维数组

    • type name[size1][size2]...[sizeN];
    • 内部嵌套的括号是可选的
    • C++ 不允许返回一个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针
    • C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量
        int * getRandom( )
        {
          static int  r[10];
         
          // 设置种子
          srand( (unsigned)time( NULL ) );
          for (int i = 0; i < 10; ++i)
          {
            r[i] = rand();
            cout << r[i] << endl;
          }
         
          return r;
        }
    
    • C++ 中您可以通过指定不带索引的数组名来传递一个指向数组的指针
    • C++ 传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址
    • C++ 不会对形式参数执行边界检查
    • 数组名是指向数组中第一个元素的常量指针

    在函数中传递一个一维数组作为参数,您必须以下面三种方式来声明函数形式参数:

    • 形式参数是一个指针myFunction(int *param)
    • 形式参数是一个已定义大小的数组 myFunction(int param[10])
    • 形式参数是一个未定义大小的数组 myFunction(int param[])

    字符串

    • C 风格的字符串
    • 字符串实际上是使用 null 字符 '\0' 终止的一维字符数组
    • 不需要把 null 字符放在字符串常量的末尾,C++ 编译器会在初始化数组时,自动把 '\0' 放在字符串的末尾
    • strcpy,strcat,strlen,strcmp,strchr,strstr

    相关文章

      网友评论

          本文标题:C++基础 2020-11-03

          本文链接:https://www.haomeiwen.com/subject/mxeivktx.html