const:
const 类型的对象在程序执行期间不能被修改改变。
const int a
const 指针
int main()
{
int a=23;
int b=67;
int c=90;
int* const p0=&a;
int const* p1=&b;
const int* const p2=&c;
*p0=66;
cout<<*p0<<endl;
p1=&b; b=66;
cout<<*p1<<endl ;
c=66;
cout<<*p2<<endl ;
}
与引用相结合
int const &a=x 等同于 const int &a=x;
和指针一样表示a是x的引用且a的值和x的值都是常量,不能被更新。
const函数
void fun1(const int a)
{
cout<<a;
}
void fun2(int* const p)
{
cout<<*p;
}
void fun3(const int &m)
{
cout<<m;
}
int * const fun4(int *p)
{
cout<<p<<" ";
return p;
}
int const fun4(int m)
{
cout<<m<<" ";
return m;
}
const在类中的使用
通过const修饰数据成员表示数据成员在初始化后不能修改,且const数据成员只能通过构造函数初始化列表初始化; 通过const修饰成员函数表示函数中不会修改类中的数据成员; 通过const修饰对象表示对象是一个常量,且常量对象只能调用类的成员函数。
class A{
public:
const int* const fun() const;
}
delete和default:
1、在函数声明后加入=delete即可将该函数标记,一旦被调用则会导致编译错误。可以将旧版本的函数标记delete。 注意:如果一个函数声明加了delete之后,不能再对其进行定义,可以理解为禁用,不然会报错
#include <iostream>
class Person {
private:
void deleteFun() = delete;
};
在函数声明后面加default,相当于对此函数进行默认的定义(一般在构造函数和析构函数里使用)。
#include <iostream>
class Person {
Person() = default;
private:
};
static:
static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁
#include <iostream>
using namespace std;
void fun()
{
static int num1 = 2;
int num2 = 2;
num1++;num2++;
cout<<"num1的值为:"<<num1<<" num2的值为:"<<num2<<endl;
}
int main()
{
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 <iostream>
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<<m<<", "<<n<<endl;
swap(&m, &n);
cout<<m<<", "<<n<<endl;
return 0;
}
函数调用的过程: 函数是一个可以重复使用的代码块,CPU 会一条一条地挨着执行其中的代码。CPU 在执行主调函数代码时如果遇到了被调函数,主调函数就会暂停,CPU 转而执行被调函数的代码;被调函数执行完毕后再返回到主调函数,主调函数根据刚才的状态继续往下执行
register:
register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量,只用于需要快速访问的变量;
register int count;
|