> 文章列表 > SYSU程设c++(第二周) string、函数重载、constexpr、auto

SYSU程设c++(第二周) string、函数重载、constexpr、auto

SYSU程设c++(第二周) string、函数重载、constexpr、auto

创建string对象:

string s1;  // s1 未使用初始化参数,即默认初始化为空字符串

string s2 = "c++" ; //不是赋值运算,它等价于 string s2("c++")  ,是初始化

string s3 (5, 's');  // s4 初始化为 5 s

string类实现了以下运算符的重载:

联接运算:+

比较运算:==,!=,<,<=,>,>=

赋值运算:=+=,右值可以是字符串,字符,C字符串,字符数组

整行读入字符串(包括空格):

getline(cin,str);

复习·常量指针与指针常量:

注意 const int * p1是常量指针(一个常量的指针),p1可以改,但*p1不能改(直接改可以,只是不能通过*p1改)

int * const p2是指针常量(指针是常量),p2不能改,但p2指向的值可以改

const int * const p3  则p3和*p3不能改。

函数重载:

C语言中,一个函数名(以及相关形参)只能定义一个函数
C++ 则允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数重载(Function Overloading),使用时会自动寻找适配的。

string操作:

s.length()      //返回长度,不包括结束符即之后。

s.c_str()       //返回一个c风格字符串,类型是const char* cs 常量指针

s.find(str,pos)    //从下标pos开始,寻找首个等于给定字符序列的子串。返回值为下标而非地址(c语言的strchr就返回地址)。find改成rfind 则从右边开始搜索。

s.replace(pos,count, str) : 从pos开始的count位被抹除,并用str取代,str可以比l位长或短。

append(str) :在后面增加字符串str

append(int count, char ch) 在后面增加count 个字符 ch

insert(int index, int count, char ch) :在 index 下标前面插入 count ch

insert(int index, str): index 下标前面插入 str

erase(int index, int count) :删除从下标 index 开始的 count 个字符

clear() 清空

substr(int pos, int count): 返回从下标pos开始长度为count的子串对象

compare(str) :str比较,返回 10-1之一

compare(int pos, int count, str) :从下标pos开始长度为count的子串与str比较,返回 1/0/-1

copy(str, int pos, int count): 将子串复制到目标对象str

swap(string other) :other 交换内容

const和constexpr:

因为 const 语义有两个:(一般两种意思同时具有)

1.限定为只读变量(作为函数参数时没有赋予初值,默认为只有这种意思)

 与引用结合时,const int & con_b = a;  则a值变时b仍然会变。

2.限定作为常量或字面量

C++11 标准添加键字 constexpr,限定为常量表达式,声明编译时可以对右值(函数或变量)求值,即限定为编译时可优化执行的函数

auto:

c++中auto是一个类型。一个变量如果有初始化表达式,就可以用auto代替类型声明。在编译期间根据表达式类型自动推导出对象的类型。

注意:

1.auto声明的变量必须有初始化

2.函数和模板参数不能被声明为auto

3.auto不能用于类型转换或其他一些操作,如sizeof

4.定义在一个auto序列的变量必须始终推导成同一类型