const 类型的对象在程序执行期间不能被修改改变。
const int aconst 指针
int main()
{
int a=23;
int b=67;
int c=90;
int* const p0=&a; //p0为指针,指向a的内存地址,指向地址不可改变 (const修饰p0,不可改变p0指向的内存地址)
int const* p1=&b; //同const int* p1=&b; p1为指针,指向b的内存地址, 不可通过*p1方式改变p1指向的值,不影响b的值修改(const修饰*p1,*p1不可改变)
const int* const p2=&c; // p2为指针,指向c的内存单元,指向地址不可改变,不可通过*p2方式改变p2指向的值,不影响c的值修改(const修饰p2与*p2,p2和*p2都不可改变)
// ( const int* const p2=&c可以理解为const int* (const p2)=&c,括号内的const修饰p2,然后把(const p2)看成一个整体进行理解,这种写法错误,但是可以借助这种方式理解)
*p0=66; //如果写成p0=&b;则会报错
cout<<*p0<
const函数
void fun1(const int a)//防止临时变量a被修改,一般不用
{
cout<
cout<<*p; // 可以通过修改*p来改变p指向内存地址的值
}
void fun3(const int &m)//防止引用的方式修改实参
{
cout<
cout<
cout<
const在类中的使用
通过const修饰数据成员表示数据成员在初始化后不能修改,且const数据成员只能通过构造函数初始化列表初始化;
通过const修饰成员函数表示函数中不会修改类中的数据成员;
通过const修饰对象表示对象是一个常量,且常量对象只能调用类的成员函数。
class A{
public:
const int* const fun() const;//返回值是一个指针,第一个const说明返回值不能修改,第二个const说明指针无法修改,第三个const说明此函数不会修改类中的数据成员
}
delete和default:
1、在函数声明后加入=delete即可将该函数标记,一旦被调用则会导致编译错误。可以将旧版本的函数标记delete。
注意:如果一个函数声明加了delete之后,不能再对其进行定义,可以理解为禁用,不然会报错
#include
class Person {
private:
void deleteFun() = delete;
};
在函数声明后面加default,相当于对此函数进行默认的定义(一般在构造函数和析构函数里使用)。
#include
class Person {
Person() = default;
private:
};
static:
static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁
#include
using namespace std;
void fun()
{
static int num1 = 2;//在局部函数执行结束后,不会回收num1的空间
int num2 = 2; //在局部函数执行结束后,便回收num2的空间
num1++;num2++;
cout<<"num1的值为:"<
int i=5;
while(i>0)
{
i--;
fun();
}
return 0;
}
输出结果:
num1的值为:3 num2的值为:3
num1的值为:4 num2的值为:3
num1的值为:5 num2的值为:3
num1的值为:6 num2的值为:3
num1的值为:7 num2的值为:3
inline:
内联关键字,为了消除函数调用的时空开销,C++ 提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开。这种在函数调用处直接嵌入函数体的函数称为内联函数(Inline Function),又称内嵌函数或者内置函数。内联函数一般比较短。
#include
using namespace std;
//内联函数,交换两个数的值
inline void swap(int *a, int *b){
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main(){
int m, n;
cin>>m>>n;
cout<
函数调用的过程:
函数是一个可以重复使用的代码块,CPU 会一条一条地挨着执行其中的代码。CPU 在执行主调函数代码时如果遇到了被调函数,主调函数就会暂停,CPU 转而执行被调函数的代码;被调函数执行完毕后再返回到主调函数,主调函数根据刚才的状态继续往下执行
register:
register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量,只用于需要快速访问的变量;
register int count;//count变量存储在寄存器中,访问速度快



