位置: IT常识 - 正文
推荐整理分享c++常见关键字总结(c++32个关键字详解),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:c++语言中的关键字,c++语言中的关键字,c++20 关键字,c++语言中常用的关键字含义,c ++关键字,c++语言中的关键字,c++常用关键字,c++关键字及其含义,内容如对您有帮助,希望把文章链接给更多的朋友!
本系列是对常见的重要c++关键字的备忘录,也许未注意到某些用法,但会不断完善。某些关键字不适合出现于此,在后面的篇章如分析类,STL,异常时会讲到。如有瑕疵,还请不吝赐教!
constconst的作用:被const修饰的值理论上不能改变,为只读语义,且因为创建后const对象无法改变,需要在定义阶段必须为他赋初值,初值可以任意复杂的表达式,修饰的常量只能作用于当前模块
但const并非完全不能改变,在定义变量时加上volatile关键字,通过指针间接修改。这是因为加上volatile编译器不会进行优化,以下例子中*pt和a都是从堆栈也就是内存中取值;而不加上volatile,编译器将进行优化,节省访问内存的时间,输出a的值时将直接从符号表取出
在后面会提到volatile关键字,作用是告诉编译器不要对此句进行优化,每次都去内存取值
volatile const int a = 1;int* pt = (int*)(&a);*pt = 100;const 可以定义编译期常量,也可以定义运⾏期常量
默认情况下,const对象仅在文件内有效,多个文件出现了同名的const对象,相当于在不同文件中分别定义了独立的对象
不能使用字面值初始化一个非常量引用.因为引用是变量的别名
int& a = 0;//错const int& b = 1;//对指针常量(顶层const)表示指针本身是个常量,一旦指定了对象,便不可改变,且指针必须在定义时初始化
形式:
数据类型* const 指针 = 变量名
例子:
int a = 0;int b = 1;int* const pt = &a;pt = &b;//错*pt = 1;//对常量指针(底层const)定义一个指针,该指针不可以修改其所指对象的值
形式:
数据类型 const * 指针 = 变量名const 数据类型* 指针 = 变量名例子:
int a = 0;const int* p1 = &a;int const* p1 = &a;*p1 = 10; //错a = 10; //对函数当形参为const时,实参可传入const类型,也可传入不为const类型,也就是说当用实参初始化形参时,顶层const会被忽略掉。不能改变形参的值
//重复定义函数void fcn( int i );void fcn( const int i ){ i == 2;//错}int a = 0;const int b = 1;fcn( a );//对fcn( b );//对一个拥有顶层const的形参无法和没有顶层的const的形参区分开,因此当我们传入区别只是是否为const类型的对象时,在函数中是等价的。但是如果形参是引用或指针,此时const为底层,因此可以区别
例子:
//顶层const,两个函数等价int func1( A );int func1( const A );//底层const,两个函数重载int func1( A* );int func1( const A* );类const类对象不可以调用非const成员函数,而普通类可以调用const成员函数
为什么不可以呢?因为this指针是指针常量但并不是常量指针,其并不具备底层const,也就是它的含义是 A* const this,如果成员函数改变了类对象的成员而类对象是const,这是不合理的
const A a;//func为a中的非const成员函数a.func();//错在类的成员函数参数本来带有一个隐藏的this指针,这个指针属于指针常量,若再在参数后面跟一个const,这个指针不仅是指针常量,还是常量指针,若函数并不改变this所指对象,我们应尽可能将this设置为常量指针
类型:const Class* const this
例子:
class A{public: int intFunc() const { return i1 };private: int i = 0;}类的成员函数返回*this,返回类型为&类对象并且成员函数为const类型,需要注意,我不可以用这样的成员函数的返回值对象来调用其他要改变类对象的值的函数,因为此时成员函数的返回值为常量对象
例子:
class A{public: A& set( char c ) { //改变类对象的成员的值 return *this } A& display() const { //展示类对象的成员 return *this; }}//调用A a;a.display().set('c');//错,因为此时display返回的常量对象,而set会修改对象的成员的值const成员函数有两个作用:
为提升程序的健壮性,只要这个成员函数不会让类对象改变,我们就要将其设计为const成员函数为了配合const类对象成员函数是否为const,是两个函数,也就是其可以重载。因为带const版本的主要是提供给const类对象调用
//对。const成员函数可以重载void func1() const;void func1();//调用非const版本A a;a.func1();const A ca;ca.func1(); //调用const版本若const成员函数返回类型是引用类型,则必须是const引用
class A{public: int& func1() const { return val; }//错,这里this指针为常量指针,而返回值非常量private: int val = 1;}构造函数不可以
上一篇:python中如何基于numpy创建矩阵(基于python语言)
友情链接: 武汉网站建设