内联函数是 C++ 为了提高运行速度做的一项优化。函数让代码更加模块化,可重用性、可读性大大提高;不过函数也有一个缺点:函数调用需要执行一系列额外操作,会降低程序运行效率。 为了解决这个问题,C++ 引入了“内联函数”的概念。使用内联函数时,编译器不再去做常规的函数调用,而是把它在调用点上“内联”展开,也就是直接用函数代码替换了函数调用。 内联函数的定义 定义内联函数,只需要在函数声明或者函数定义前加上 inline 关键字。例如将比较两个字符串、并返回较长的字符串,就可以重写为内联函数: inline const string& longerStr(const string& str1, const string& str2) { return str1.size() > str2.size() ? str1 : str2; } 当我们试图打印输出调用结果时: cout << longerStr(str1, str2) << endl; // 编译器会自动把它展开,提高运行效率。 // cout <&l
由于数组“不能拷贝”的特点,函数也无法直接返回一个数组。不过我们可以使用指针或者引用来实现返回数组的目标;通常会返回一个数组指针。 int arr[5] = {1, 2, 3, 4, 5}; int* pa[5]; // 指针数组,pa是包含5个int指针的数组 int(*ap)[5] = &arr; // 数组指针,ap是一个指针,指向长度为5的int数组 int(*fun(int x))[5]; // 函数声明,fun返回值类型为数组指针 这里对于函数 fun 的声明,我们可以进行层层解析: fun(int x) :函数名为 fun,形参为 int 类型的 x (* fun(int x)):函数返回的结果,可以执行解引用操作,说明是一个指针 (* fun(int x))[5]:函数返回结果解引用之后是一个长度为 5 的数组,说明返回类型是数组指针 int(* fun(int x))[5]:数组中元素类型为 int 数组指针的定义比较繁琐,为了简化定义,我们可以使用关键字 typedef 来定义一个类型的别名: // 简化函数声
在 C++ 中,指针、const 和数组之间有一些重要的关系。指针和 const 可以用于限定指针的可变性和所指向的值的可变性,而指针可以与数组进行关联,方便对数组进行遍历和操作。 指针和 const 指针可以和 const 修饰符结合,常见的有两种形式: 一种是指针指向的是一个常量 另一种是指针本身是一个常量 (1)指向常量的指针 指针指向的是一个常量,所以只能访问数据,不能通过指针对数据进行修改。不过指针本身是变量,可以指向另外的数据对象。这时应该把 const 加在类型前。 const int a = 10, b = 20; //int* pa = &a; // 错误,类型不匹配 const int* pa = &a; // 正确,pa是指向常量的指针,类型为const int* pa = &b; // pa可以指向另一个常量 int i = 1024; pa = &i; // pa也可以指向变量 *pa = 1000; // 错误,不
字符串我们并不陌生。一串字符连在一起就是一个“字符串”,比如用双引号引起来的“Hello World!”就是一个字符串字面值。 字符串其实就是所谓的“纯文本”,就是各种文字、数字、符号在一起表达的一串信息;所以字符串就是 C++ 中用来表达和处理文本信息的数据类型。 标准库类型 string C++ 的标准库中,提供了一种用来表示字符串的数据类型 string,这种类型能够表示长度可变的字符序列。和 vector 类似,string 类型也定义在命名空间 std 中,使用它必须包含string 头文件。 # include<string> using namespace std; (1)定义和初始化 string C++ 中有很多不同类型的初始化方式,string 也是一个标准库类型,它的初始化与 vector 非常相似。 常用写法: string 变量名 = "字符串值" // 默认初始化 string s1; // 拷贝初始化 string s2 = s1; string s3 = "Hello, World"; // 直接初始化 string
数组尽管很灵活,但使用起来还是很多不方便。为此,C++ 语言定义了扩展的“抽象数据类型”(Abstract Data Type,ADT),放在“标准库”中。 对数组功能进行扩展的一个标准库类型,就是“容器” vector。顾名思义,vector “容纳”着一堆数据对象,其实就是一组类型相同的数据对象的集合。 头文件和命名空间 vector 是标准库的一部分。要想使用 vector,必须在程序中包含 <vector> 头文件,并使用std 命名空间。 # include<vector> using namespace std; 在 vector 头文件中,对 vector 这种类型做了定义;使用 #includ 引入它之后,并指定命名空间 std 之后,我们就可以在代码中直接使用 vector 了。 vector 的基本使用 vector 其实是 C++ 中的一个“类模板”,是用来创建类的“模子”。所以在使用时还必须提供具体的类型信息,也就是说,这个容器中到底要容纳什么类型的数据对象;具体的形式是在 vector 后面跟一个尖括号 <&
Justin_Wu
山不让尘,川不辞盈
本网站由 提供CDN加速/云存储服务
鄂ICP备2023005457号 鄂公网安备 42011302000815号