C++知识点
2021/10/22 14:09:35
本文主要是介绍C++知识点,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1. 符号.和->的区别
A.B,则A为对象或者结构体,点号(.)左边必须为对象实体
A->B,则A为指针,->为成员提取,A->B为提取A中的成员B,A只能指向类,结构体,箭头(->)左边必须为指针
2.const
const对象声明必须进行初始化,且不可被修改
默认情况下,const对象仅在文件内有效
多文件下
//file1.cpp,定义并初始化一个常量,能被其他文件访问 extern const int a=1; //file1.h,与a是同一个常量 ertern const int a;
对常量的引用可能引用一个非const对象
int i=1; int &r1=i; const int &r2=i;//对常量的引用,不能通过r2修改i r1=0;//编译通过,可以通过r1修改i r2=0;//编译错误
指向常量的指针
const int p=3; int *ptr=&p;//编译错误,指针类型必须与所指对象类型一致,const int!=int const *ptr=&p;//编译通过
常量指针,将指针本身定为常量
int r=0; int *const c=&r; //c将一直指向r
顶层const
指针常量:代表指针本身是常量,声明时必须初始化,之后它存储的地址值就不能再改变。声明时const必须放在指针符号后面,即:const 。声明常量指针就是顶层const,
底层const
指向常量的指针:代表 不能改变其指向内容的指针。声明时const可以放在类型名前后都可,拿int类型来说,声明时:const int和int const 是等价的。声明指向常量的指针也就是 底层const
一个指针本身添加const限定符就是顶层const,而指针所指的对象添加const限定符就是底层const
3.constexpr 常量表达式
常量表达式 值不会改变且自编译过程就会得到结果的表达式
const int s=10; const int s2=s*10;//常量表达式 const int s3=get_size();//非常量表达式,他的变量类型为int
constexpr int s=10; constexpr int s1=s+1; constexpr int s2=get_size();//get_size()是一个constexpr函数时为常量表达式,在编译时将结果进行编译
尽管指针引用共可以定义为constexpr,但初始化的值必须为nullptr或0
constexpr定义的对象为顶层const
const int *p=nullptr;//指向整数常量的指针 constexpr int *p=nullptr;//一个指向整数的常量指针
4.类型别名
typedef wage double ;//double wage同义 typedef wage base,*p;//wage base同义。p,double*同义
C++11
using wage=double;
5.auto
auto(C++11)自动推导类型
int i=0,*p=&i;//编译通过,i:int,p:int * auto i=0,p=3.0;//编译失败,i,p类型不一致
5.decltype
decltype选择并返回操作数的数据类型
decltype(f()) sum=x;
sum的类型为函数的返回类型
如表表达式是一个变量则返回该变量类型
int i=0,*p=&i,&r=i; decltype(i+1) b;//b为未初始化的int,正确 decltype(*p) c;//c是引用类型,必须初始化,错误 decltype((i)) d;//参数加了(),则为赋值语句左值的特殊表达式,为引用l
6.string
string可变长的字符串序列
string s1; string s2=s1; string s3="a";//拷贝初始化 string s4(5,'a');//"aaaaa"//直接初始化 string s5("aaaaa")//直接初始化
操作
os<<a;//写入输出流os,返回os is>>a;//从is中读出字符串,字符串用空白分割,返回is getline(cin,s);//从cin中读取一行给s,返回is s.empty();//空返回true s.size();//返回字符个数,返回类型:size_type,无符号类型的值,能存下所有的字符串长度 s[n];//返回第n个字符的引用 s1+s2;//返回拼接后的结果 <,<=,>,>= //判断字典序 s1==s2;//长度和字符全部相等成立 s1="hello"; s2=s1+"world"//正确, s2="hello"+"world"//错误,+支持字符串相加(至少有一个),不支持两个字面量相加
cctype头文件中的函数(处理每个字符)
isalnum(c)//是数字/字母时为真 isalpha(c)//字母 iscntrl(c)//控制字符 isdigit(c)//数字 isgraph(c)//不是空格 islower(c)//小写字母 isprint(c)//可打印字符 ispunct(c)//标点 isspace(c)//空白 issupper(c)//大写字母 isxdigit(c)//16进制数字 tolower(c)//转小写 toupper(c)//转大写
遍历
for(auto i:s){ //i为字符的拷贝,操作不影响原字符串 } for(auto &i:s){ //i为字符的引用,操作影响原字符串 }
字符串截取
//pos必选参数,开始位置 //n可选参数,取n个字符,没有表示截取到末尾 string substr(int pos=0,n) const;
7.右值引用
8.仿函数
仿函数(functor),是通过重载()运算符模拟函数形为的类
- 仿函数是一种类
- 必须重载()
template<typename T> struct comp { bool operator()(T in1, T in2) const { return (in1>in2); } }; //第一种方式 //先初始化一个对象,再调用该对象的方法 comp<int> cp; cout << cp(6, 3) << endl; //使用对象调用 //第二种方式 //仿函数,会产生一个临时的无名对象,并调用其方法 cout << comp<int>()(1, 2) << endl; //使用仿函数实现
使用仿函数
class comp { comp(int a) { sec = a; } int sec; bool operator()(int num) { return (num < sec); } }; vector<int> v{1,2,3,4,5,6,7,8,9}; count_if(v_a.begin(), v_a.end(), comp<int>(5))
bool comp(int a,int b){ return a<b; } vector<int> v{1,2,3,4,5,6,7,8,9}; //这里编译错误,只能传入方法,不能传参 count_if(v_a.begin(), v_a.end(), comp(5))
这篇关于C++知识点的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01lip-sync公司指南:一文读懂主要玩家和技术
- 2024-11-01Anthropic的新RAG方法——提升大型语言模型在特定领域的表现
- 2024-11-01UniApp 中组件的生命周期是多少-icode9专业技术文章分享
- 2024-11-01如何使用Svg Sprite Icon简化网页图标管理
- 2024-10-31Excel数据导出课程:新手从入门到精通的实用教程
- 2024-10-31Excel数据导入课程:新手入门指南
- 2024-10-31RBAC的权限课程:新手入门教程
- 2024-10-31Svg Sprite Icon课程:新手入门必备指南
- 2024-10-31怎么配置 L2TP 允许多用户连接-icode9专业技术文章分享
- 2024-10-31怎么在FreeBSD上 安装 OpenResty-icode9专业技术文章分享