C++知识点
The_Dan
这个作者很懒,什么都没留下…
展开
-
string::find()函数和string::npos静态成员常量的使用
string::find()函数string::find()函数:是一个字符或字符串查找函数,该函数有唯一的返回类型,即string::size_type,即一个无符号整形类型,可能是整数也可能是长整数。如果查找成功,返回按照查找规则找到的第一个字符或者子串的位置;如果查找失败,返回string::npos,即-1(当然打印出的结果不是-1,而是一个很大的数值,那是因为它是无符号的)。这里值得注意的是string::find()函数的返回值不是bool类型,所以无法通过find()函数的返回值直接判原创 2022-04-07 15:08:52 · 459 阅读 · 0 评论 -
重写、重载和隐藏的区别
重载:是指同一可访问区内被声明几个具有不同参数列(参数的类型、个数、顺序)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。class A{public:void fun(int tmp);void fun(float tmp); // 重载 参数类型不同(相对于上一个函数)void fun(int tmp, float tmp1); // 重载 参数个数不同(相对于上一个函数)void fun(float tmp, int tmp1); // 重载 参数顺序不同(相对于上..原创 2022-03-13 21:25:07 · 2526 阅读 · 0 评论 -
快慢指针在链表中的应用
判断链表中是否存在环让快慢指针从链表头开始遍历,快指针向前移动两个位置,慢指针向前移动一个位置;如果快指针到达NULL,说明链表以NULL为结尾,不是循环链表。如果 快指针追上慢指针,则表示出现了循环。bool hasCycle(ListNode *head) { if(head == nullptr || head -> next == nullptr) return false; ListNode *slow = head, *fas原创 2022-03-10 09:08:03 · 669 阅读 · 0 评论 -
inline关键字
为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline关键字。类内定义成员函数默认是内联函数类外定义成员函数,若想定义为内联函数,需用关键字声明。当在类内声明函数,在类外定义函数时,如果想将该函数定义为内联函数,则可以在类内声明时不加 inline 关键字,而在类外定义函数时加上 inline 关键字。inline 函数工作原理内联函数不是在调用时发生控制转移关系,而是在编译阶段将函数体嵌入到每一个调用该函数的语句块中,编译器会将程序中出现内联函数的调用表达式用原创 2022-03-06 19:46:33 · 261 阅读 · 0 评论 -
static 关键词
作用: static 定义静态变量,静态函数。保持变量内容持久:static 作用于局部变量,改变了局部变量的生存周期,使得该变量存在于定义后直到程序运行结束的这段时间。(从作用域上来说,局部变量加上static相当于全局变量)隐藏:static作用于全局变量和函数,改变了全局变量和函数的作用域,使得全局变量和函数只能在定义它的文件中使用,在源文件中不具有全局可见性。(注:普通全局变量和函数具有全局可见性,即其他的源文件也可以使用。)C++中static 作用于类的成员变量和类的成员函数,使得类变原创 2022-03-06 18:44:13 · 443 阅读 · 0 评论 -
explict 关键字的作用
explicit关键字的作用就是防止单参类构造函数的隐式自动转换.作用:用来声明类构造函数是显示调用的,而非隐式调用,可以阻止调用构造函数时进行隐式转换。只可用于修饰单参构造函数,因为无参构造函数和多参构造函数本身就是显示调用的,再加上 explicit 关键字也没有什么意义。隐式转换:float a = 10;//这里的10就会被隐式转换成浮点数class::A a = 10;//这里的10就会被隐式转换成类型A为什么要创造一个关键字专门负责阻止单参类构造函数的隐式自动转换呢?因为A a =原创 2022-03-06 18:18:04 · 393 阅读 · 0 评论 -
范围for 语句
for (declaration : expression){ statement}参数的含义:expression:必须是一个序列,例如用花括号括起来的初始值列表、数组、vector ,string等,这些类型的共同特点是拥有能返回迭代器的 beign、end 成员。declaration:此处定义一个变量,序列中的每一个元素都能转化成该变量的类型,常用 auto 类型说明符。 string str = "这是一个字符串"; for(auto ch : vec) cout <原创 2022-03-06 13:28:19 · 111 阅读 · 0 评论 -
lambda 表达式
lambda匿名函数的定义:C++ 11 中的 Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda 的语法形式如下:[函数对象参数] (操作符重载函数参数) mutable 或 exception 声明 -> 返回值类型 {函数体}可以看到,Lambda 主要分为五个部分:[函数对象参数]、(操作符重载函数参数)、mutable 或 exception 声明、-> 返回值类型、{函数体}.[capture list] (parameter list) -&g原创 2022-03-06 13:23:56 · 469 阅读 · 0 评论 -
auto关键字
auto 关键字:自动类型推导,编译器会在 编译期间 通过初始值推导出变量的类型,通过 auto 定义的变量必须有初始值。auto 关键字基本的使用语法如下:auto 变量必须在定义时初始化,这类似于const关键字。定义在一个auto序列的变量必须始终推导成同一类型。例如:auto a4 = 10, a5 = 20, a6 = 30;//正确auto b4 = 10, b5 = 20.0, b6 = 'a';//错误,没有推导为同一类型使用auto关键字做类型自动推导时,依次施加一下规则:原创 2022-03-06 11:27:28 · 195 阅读 · 0 评论 -
C++编译过程以及静态、动态链接的理解
编译过程分为四个过程:编译(编译预处理、编译、优化),汇编,链接。编译预处理:处理以 # 开头的指令;编译、优化:将源码 .cpp 文件翻译成 .s 汇编代码;汇编:将汇编代码 .s 翻译成机器指令 .o 文件;链接:汇编程序生成的目标文件,即 .o 文件,并不会立即执行,因为可能会出现:.cpp 文件中的函数引用了另一个 .cpp文件中定义的符号或者调用了某个库文件中的函数。那链接的目的就是将这些文件对应的目标文件连接成一个整体,从而生成可执行的程序 .exe文件。链接分为原创 2022-03-05 19:34:38 · 296 阅读 · 0 评论