1. 不能用非const修饰的指针指向const修饰的变量
2. c++中的四种cast
(1)static_cast
兼容类型之间的进行显式转换
(1)基本数据类型转化(int 转 double)
(2)类层次结构中上行转换(子类转父类)
(3)示例
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
enum Week
{
Sun, Mon, Tue, Wes, Thu, Fri, Sat
};
int main()
{
enum Week w;
int n = 10;
w = static_cast<Week>(n);
cout << w + 1 << endl;
return 0;
}
(2)dynamic_cast
(3)const_cast
(4)reinterpret_cast
3. 内联函数
(1)定义
C++中的内联函数(Inline Function)是一种用于优化程序性能的机制。通过在函数声明或定义前加上关键字inline
,编译器可以将该函数的调用直接替换为函数体的代码,以减少函数调用的开销,特别是在短小、频繁调用的函数中,这种机制可以提高执行效率
(2)示例代码
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
inline void fun(int *p)
{
*p += 1;
};
int main()
{
int i = 0;
fun(&i);
cout << i << endl;
return 0;
}
(3)注意
多文件编程中,内敛函数所有的函数体内容最好写在头文件中
(1)main.cpp
#include <iostream>
#include <cstdio>
#include <cstring>
#include "fun.h"
using namespace std;
int main()
{
int i = 0;
fun(&i);
cout << i << endl;
return 0;
}
(2)fun.h
#ifndef FUN_H
#define FUN_H
inline void fun(int *p)
{
*p += 1;
};
#endif // FUN_H
4. 引用传参(变量别名,可以通过函数传参直接操作原变量)
(1)定义
在C++中,引用传参是一种通过传递变量的引用(即别名)来实现函数参数传递的方式。相比值传递,引用传参允许函数直接操作原始数据,而无需对参数进行复制,因此可以提高性能,特别是在传递大型对象时
(2)作用
在性能要求高的场景,避免复制开销,允许修改实参,提高内存效率
(3)代码示例
#include <iostream>
#include <cstdio>
#include <cstring>
#include "fun.h"
using namespace std;
void fun1(int &p)
{
++p;
}
int main()
{
int i = 0;
int &ref = i;
ref += 1;
cout << i << endl;
fun1(i);
cout << i << endl;
return 0;
}
(4)引用和指针的区别
(1)引用不占空间,指针占8个字节
(2)引用必须初始化,而指针不必
(3)引用在被绑定以后,这种绑定关系是不能被拆解的,而指针可以指向其他的空间
5.函数的重载
(1)定义
c++中函数重载是指在同一个作用域内,可以定义多个具有相同函数名但参数列表不同的函数,编译器通过参数的个数、类型或顺序来区分这些函数,从而选择合适的函数进行调用
(2)代码示例
(1)参数个数不同
void print(int a);
void print(int a, int b);
(2)参数类型不同
void print(int a);
void print(double a);
(3)参数顺序不同
void print(int a, double b);
void print(double a, int b);
(3)函数重载规则
(1)返回值类型不能作为函数重载的依据,即返回值类型不同但参数列表相同的函数不能构成重载
int add(int a, int b);
double add(int a, int b); // 错误,不能通过返回值类型区分
(2)默认参数不能用于区分重载函数
void print(int a);
void print(int a, int b = 0); // 错误,默认参数导致模糊