美文网首页
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