C++编程
文章平均质量分 72
在实战中了解到的C++知识,用于总结。
ZHAOCHENHAO-
Just for fun!
展开
-
C++编程之 可变参数模板
在这个函数中,我们使用展开语句来展开args参数包,将参数包中的每个元素展开成一个独立的语句std::cout原创 2023-03-16 21:25:33 · 515 阅读 · 1 评论 -
C++17编程之 折叠表达式
折叠表达式是一种新的语言特性,它使得可以对包含若干个参数的可变参数模板进行操作,同时将其所有参数合并成一个值。比如,如果你用减法或除法作为一元右折叠的操作符,那么你得到的结果可能和你预期的不一样。(4)当一元折叠表达式中的参数包为空时,只有三个运算符(&& || 以及逗号)有缺省值,其中&&的缺省值为true,||的缺省值为false,逗号的缺省值为void()。(3)初始值在右边的为右折叠,展开之后从右边开始折叠。折叠表达式共有四种语法形式,分别为一元的左折叠和右折叠,以及二元的左折叠和右折叠。原创 2023-03-16 21:17:19 · 804 阅读 · 0 评论 -
C++编程之 std::forward
当向wrapper里面传入1的时候,wrapper推导认为T是一个右值引用int&& ,通过引用折叠原则,int && + && =int&& ,相当于wrapper(int&& arg),同时我们知道了T推导为int&&,那么在向func传递的时候,就是func(std::forward<int&&>(arg)),那么func会以左值引用的形式func(int&& x)调用arg。对于一个模板函数或类模板,当传递一个参数时,如果该参数是左值,那么传递的就是一个左值引用;原创 2023-03-16 12:12:24 · 5992 阅读 · 1 评论 -
C++编程之 万能引用
万能引用是一种可以同时接受左值或右值的引用,它的形式是T&&,其中T是一个模板参数。万能引用不是C++的一个新特性,而是利用了模板类型推导和引用折叠的规则来实现的功能。你可以看到,在调用g时,t既可以绑定到左值上也可以绑定到右值上,并且保持了原来实参的属性。这就实现了万能引用。模板类型推导是指在调用一个模板函数时,编译器会根据传入的实参来推导出模板参数的类型。结合这两个规则,我们就可以理解万能引用的工作原理。原创 2023-03-16 11:03:08 · 977 阅读 · 1 评论 -
std::bind()函数详解
std::bind()函数详解原创 2023-03-06 23:14:28 · 8174 阅读 · 0 评论 -
assert()函数解析
调试assert()函数的用法原创 2023-03-06 21:16:53 · 885 阅读 · 0 评论 -
整理的C++面经(较全)
C++面试过程中整理的知识点原创 2022-04-04 09:55:44 · 79028 阅读 · 38 评论 -
C++中四种cast转换
文章目录1.const_cast2.static_cast使用方法:static_cast详解基本类型数据转换举例如下:类上行和下行转换:3.dynamic_cast转换方式:指针类型引用类型4.reinterpret_cast5.为什么不使用C的强制转换?参考链接C++中四种类型转换是:static_cast, dynamic_cast, const_cast, reinterpret_cast1.const_cast用于将const变量转为非const2.static_cast用于各种隐式转换转载 2021-05-21 11:04:06 · 2173 阅读 · 0 评论 -
static关键字的作用
文章目录1.全局静态变量2.局部静态变量3.静态函数4.类的静态成员5.类的静态函数1.全局静态变量在全局变量前加上关键字static,全局变量就定义成一个全局静态变量.静态存储区,在整个程序运行期间一直存在。初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化);作用域:全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾。2.局部静态变量在局部变量之前加上关键字static,局部变量就成为一个局部静态变量。内存中的位置:静转载 2021-05-21 11:00:05 · 135 阅读 · 0 评论 -
C++中int *p[]和int (*p)[]的区别
int *p[n] 详细讲解int * p[2]是一个指向int型的指针数组,即:p是包含两个元素的指针数组,指针指向的是int型。也就是说p[0],p[1]是各指向一个一维数组的指针,指针指向的是int型。试例:#include <iostream>using namespace std;int main(){ int arr[2] = { 1,2 }; int arr1[3] = { 10,2,3 }; int* p[2]; p[0] = arr; p[1] = a原创 2021-03-14 11:34:59 · 4273 阅读 · 2 评论 -
面向行的输入getline()和get()
文章目录cin.getline()cin.get()getline()1.下面是将一行输入读取到数组中的代码:2.下面是将一行输入读取到string对象中的代码cin.getline()面向行输入的指令cin.getline():该函数有两个参数,第一个参数是用来存储输入行的数组的名称,第二个参数是要读取的字符数.注意::cin.getline()与cin.get()相同点:1都是采用面向行而不是面向单词的方法.2都是读取一行输入,值到到达换行符.不同点:到达换行符之后,cin.getline()原创 2020-10-14 09:10:45 · 139 阅读 · 0 评论 -
C++ 11 Lambda表达式和min_element()与max_element()的使用
声明Lambda表达式Lambda表达式完整的声明格式如下:[capture list] (params list) mutable exception-> return type { function body }各项具体含义如下capture list:捕获外部变量列表原创 2020-09-18 08:58:55 · 3059 阅读 · 0 评论 -
为什么输出错误时要用cerr?
我的理解就是,当错误到来是,立即输出错误,不占用缓存,到来一个信息输出一个信息,比cout要快.原创 2020-09-17 14:54:25 · 297 阅读 · 0 评论 -
static关键字的作用
static变量在c语言中的作用1.子函数中的静态变量在定义变量前加上static关键字成为静态变量之后,这该变量的生存周期就会更变,直到整个程序运行结束之后,该静态变量才会销毁.生存周期: 变量从定义到销毁的时间范围。存放在全局数据区的变量的生存周期存在于整个程序运行期间,而存放在栈中的数据则随着函数等的作用域结束导致出栈而销毁,除了静态变量之外的局部变量都存放于栈中。static变量是指静态的变量,不管是在全局还是局部声明的static变量都存放于程序的全局变量区域,所以它的生命周期是从程序开始原创 2020-09-16 14:00:11 · 239 阅读 · 0 评论 -
int **p和int *p的区别
int *p表示表示的是一级指针,表示p所指向的地址里面存放的是指向int类型的值。int **p表示的是二级指针,表示p所指向的地址里面存放的是一个指向int类型的指针。一级指针存放变量的地址,指向的值是变量的内容。如int* p={1,2,3}, p=数组的首地址,*p=数组的第一个值;二级指针存放一级指针的地址,指向一级指针。如int*p ={1,2,3}, int**pp=&p,pp=指针p的首地址,*pp=数组的首地址,**pp=数组第一个值1。指针数组的数组名传递参数对应为指针的原创 2020-09-05 20:39:45 · 1143 阅读 · 0 评论 -
override的用法
override用于重载父类成员函数override关键字用于父类有虚成员函数,子类成员函数进行父类成员函数重载时,当父类没有该虚成员函数时,会进行报错.例如:父类:(virtual 钱包)子类1:public 父类钱包 override{}子类2: public 父类钱 override{}这样子类2中就会报错,因为父类中没有"钱"这个虚类成员函数.class person{public: virtual void xiaoming(void){...}};class原创 2020-08-02 15:52:56 · 2807 阅读 · 1 评论 -
explicit的用法
explicit的用法用于类构造函数中,避免进行隐身参数传递,进行显示传递参数。原创 2020-07-30 21:31:32 · 379 阅读 · 0 评论