c++关键字const的用法详解

目录
  • C语言const的用法
    • 1、指向常量的指针变量
      • const int *p指针指向int a;
    • 2、常指针(常地址)
      • int * const p指针指向int a;
    • 3、指向常量的常指针
      • const int * const p指针指向int a;
    • 4、其他情况
      • 4.1 int *p指针指向const int a(报错)
      • 4.2const int *p指针指向const int a
  • c++语言const的用法
    • 常数据成员
    • 常成员函数
    • 常对象
    • 指向常对象的指针变量
    • 指向对象的常指针
  • 总结

C语言const的用法

我们知道,const可以修饰一般的变量,这样的变量我们称之为常变量,常变量的值是不能修改的。

const也可以修饰指针变量,可以指定指针变量是一个常量,或者指定指针变量指向的对象是一个常量。有以下几种情况。

1、指向常量的指针变量

const int *p指针指向int a;

格式为:

const 类型名 * 指针变量名;

#include<iostream>
using namespace std;
int main()
{
	int a = 10;
	const int *p = &a;
	//*p = a;//报错,表达式必须是可以修改的左值。
	a = 20;//合法
	cout << a << endl;
	return 0;
}

分析:用指向常量的指针变量只是限制了通过指针变量改变它指向的对象的值,但是可以通过它本身来改变它的值。

指向常量的指针变量一般用处是作为函数参数

2、常指针(常地址)

int * const p指针指向int a;

形式为:

类型名 * const 指针变量名;

#include<iostream>
using namespace std;
int main()
{
	int a = 10;
	int b = 10;
	int * const p = &a;
	*p = a;//合法
	//p = &b;报错,表达式必须是可以修改的左值。
	cout << a << endl;
	return 0;
}

说明:

1.这种指针变量称为常指针变量,简称常指针,即指针值(地址)不能改变。

2.必须在定义时初始化,指定其指向(类似于在建立常变量时也必须初始化)

3.指针变量的指向不能改变你,但是指针变量的指向变量的值可以改变

4.注意const和*的位置

常指针一般用处在于c++的引用。c++引用的本质就是常指针

3、指向常量的常指针

const int * const p指针指向int a;

形式为:

const 类型名 * const 指针变量名;

#include<iostream>
using namespace std;
int main()
{
	int a = 10;
	int b = 10;
	const int * const p = &a;
	//*p = a;//报错,表达式必须是可以修改的左值。
	//p = &b;//报错,表达式必须是可以修改的左值。
	a = 100;//合法
	cout << a << endl;
	return 0;
}

4、其他情况

4.1 int *p指针指向const int a(报错)

#include <iostream>
using namespace std;
int main()
{
	const int  a = 10;
	//int *p = &a;//报错,const int不能用于初始化int *
	return 0;
}

4.2const int *p指针指向const int a

#include <iostream>
using namespace std;
int main()
{
	const int  a = 10;
	const int b = 20;
	const int *p=&a;
	//*p = 100;//报错,表达式必须是可修改的左值
	//a = 100;//报错,表达式必须是可修改的左值
	p = &b;//合法
	cout << *p << endl;
	return 0;
}

c++语言const的用法

c++是对c语言的扩展,除了上述从c语法继承过来的语法之外,还有自己独有的const用法,主要体现在常对象,常数据成员,常成员函数等方面。

常数据成员

在类的数据成员声明前面加上const修饰符就成为了常数据成员。

格式如下:

const 数据类型 数据成员名;

关于常数据成员的说明如下:

1、类的常数据成员必须进行初始化,而且只能通过构造函数的成员初始化列表进行初始化。列表中对成员的初始化顺序,与他们在列表中的顺序无关,而与它们在类中的声明顺序有关。

2、包含常数据成员的类不能使用默认构造函数。

3、在对象被创建以后,其常数据成员的值就不能被改变。

常数据成员总结:其实加了const修饰之后,就是让该数据成员成了不能修改的左值。

常成员函数

注意:常数据成员的const修饰是放在成员函数后面的。

格式如下:

函数类型 成员函数名(参数列表) const;

关于常成员函数的说明:

1、常成员函数不能修改对象的数据成员值(无论是否有const修饰)。

2、const修饰发要加在函数说明的尾部,并且作为函数类型的一部分,不能省略。如果常成员函数定义在类外,那么不论是在类内声明,类外定义,都不能省略关键字const。

3、const成员函数不能访问非const成员函数。

4、const作为函数类型的一部分,可以参与区分重载函数。

常成员函数总结:其实加了const修饰后,就是限制其修改数据成员的值(无论是否有const修饰)和访问非const成员函数。

常对象

const修饰对象的格式如下:

类名 const 对象名(实参列表):

const类名 对象名(实参列表):

关于常对象的说明:

1、常对象的数据成员都是为常数据成员,不能改变其值,因此在定义常对象时,构造函数只能用参数初始化列表对常数据成员初始化。

2、常对象的成员函数不自动成为常成员函数,且常对象不能调用非常成员函数,要想被常对象调用,必须声明为常成员函数。

3、常对象在定义时必须初始化,并且其数据值不能改变。

常对象总结:常对象就是限制其只能调用常成员函数并且让其数据成员变成const数据成员。

指向常对象的指针变量

指向常对象的指针变量与指向常变量的指针变量是完全一样的。

指向对象的常指针

指向对象的常指针与指向变量的常指针是完全一样的。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • 浅析c++ 中const关键字

    const是一个C++语言的限定符,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性.另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助. define与const的区别 1.define作用在预处理时,是简单地字符替换 2. const作用在编译时,具有类型检查的功能 3. const必须进行初始化 常量指针与指针常量 #include <iostream> using std::endl; using std::cout

  • C++ const关键字分析详解

    目录 C语言中修饰变量 C语言中修饰指针变量 C语言中修饰函数的参数 C语言中修饰函数的返回值 C++中修饰变量 C++中修饰函数的参数 C++中修饰函数的返回值 C++中修饰类的成员函数 C++中修饰类的成员变量 总结 C语言中修饰变量 在C语言中,被const修饰的是一个不能被修改的变量. C语言中修饰指针变量 #include <stdio.h> //代码1 void test1() { int n = 10; int m = 20; int *p = &n; *p = 20;/

  • 详解C/C++中const关键字的用法及其与宏常量的比较

    1.const关键字的性质 简单来说:const关键字修饰的变量具有常属性. 即它所修饰的变量不能被修改. 2.修饰局部变量 const int a = 10; int const b = 20; 这两种写法是等价的,都是表示变量的值不能被改变,需要注意的是,用const修饰变量时,一定要给变量初始化,否则之后就不能再进行赋值了,而且编译器也不允许不赋初值的写法: 在C++中不赋初值的表达一写出来,编译器即报错,且编译不通过. 在C中不赋初值的表达写出来时不报错,编译时只有警告,编译可以通过.而

  • C++ const关键字的实例用法

    C++中的const更像编译阶段的#define const int m = 10; int n = m; 变量是要占用内存的,即使被const修饰也不例外.m,n两个变量占用不同的内存,int n = m:表示将m的值赋给n. 在C语言中,编译器会先到m所在的内存取出一份数据,再将这份数据赋给n: 在C++中,编译器会直接将10赋给m,没有读取内存的过程,和int n = 10效果一样. 在C++中的常量更类似于#define命令,是一个值替换的过程,只不过#define是在预处理阶段替换,而

  • C/C++ 中const关键字的用法小结

    C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性. Const作用 NO. 作用 说明 参考 1 可以定义const常量 const int Max = 100; 2 便于进行类型检查 const常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误 void f(const int i) { ---} //对传入的参数进行类型检查,不匹配进行提示 3 可以保护被修

  • C++语言const 关键字使用方法图文详解

    之前一直在学习C/C++,关于const的使用,这里出现一点,那里出现一点.知识用时方恨少,这一段时间正好各种笔试题,其中关于const的用法也是层出不穷,所以疲于在书本上各种翻,这里汇总一下,加深自己的印象的同时,也方便以后查阅和学习.菜鸟一个,若有错误,望指正! const关键字 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的.不管出现在任何上下文都是为这个目的而服务的. const使用方法 定义const对象 const修饰符可以把对象转变成常数对象,意

  • c++关键字const的用法详解

    目录 C语言const的用法 1.指向常量的指针变量 const int *p指针指向int a: 2.常指针(常地址) int * const p指针指向int a; 3.指向常量的常指针 const int * const p指针指向int a; 4.其他情况 4.1 int *p指针指向const int a(报错) 4.2const int *p指针指向const int a c++语言const的用法 常数据成员 常成员函数 常对象 指向常对象的指针变量 指向对象的常指针 总结 C语言

  • Python函数关键字参数及用法详解

    目前为止,我们使用函数时所用的参数都是位置参数,即传入函数的实际参数必须与形式参数的数量和位置对应.而本节将介绍的关键字参数,则可以避免牢记参数位置的麻烦,令函数的调用和参数传递更加灵活方便. 关键字参数是指使用形式参数的名字来确定输入的参数值.通过此方式指定函数实参时,不再需要与形参的位置完全一致,只要将参数名写正确即可. 因此,Python 函数的参数名应该具有更好的语义,这样程序可以立刻明确传入函数的每个参数的含义. 例如,在下面的程序中就使用到了关键字参数的形式给函数传参: def di

  • Java switch关键字原理及用法详解

    这篇文章主要介绍了Java中 switch关键原理及用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Switch语法 switch作为Java内置关键字,却在项目中真正使用的比较少.关于switch,还是有那么一些奥秘的. 要什么switch,我有if-else 确实,项目中使用switch比较少的一个主要原因就在于它的作用能被if-else代替,况且switch对类型的限制,也阻碍了switch的进一步使用. 先看看switch的语法

  • C语言const关键字的用法详解

    目录 1 介绍 1.1 const修饰变量 1.2 const修饰数组 1.3 const修饰指针 1.4 const修饰函数参数 2 const对程序的影响 3 总结 1 介绍 const关键字是constant的缩写,翻译为常量.常数.在C语言中const的作用很强大,它可以修饰变量.数组.指针.函数参数等. 1.1 const修饰变量 const修饰变量,表示希望此变量具有只读性,防止被直接直接修改. //const关键字是constant的缩写,翻译为常量.常数. //在C语言中cons

  • C++ operator关键字(重载操作符)的用法详解

    operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名. 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,"功能"都是由函数实现的). 一.为什么使用操作符重载? 对于系统的所有操作符,一般情况下,只支持基本数据类型和标准库中提供的class,对于用户自己定义的class,如果想支持基本操作,比如比较大小,判断是否相等,

  • C#中const 和 readonly 修饰符的用法详解

    1. 只有C#内置类型(int,double,long等)可以声明为const;结果.类和数组不能声明为const. 2. readonly 是在字段上使用的修饰符,直接以类名.字段访问. 3. const 必须在申明中初始化.之后不能再修改. 4. readonly可以在申明中初始化,也可以在构造函数中初始化,其它情况不能修改. namespace const_and_readonly { class Program { static void Main(string[] args) { Co

  • Java中volatile关键字的作用与用法详解

    volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Java 5之后,volatile关键字才得以重获生机. volatile 关键字作用是,使系统中所有线程对该关键字修饰的变量共享可见,可以禁止线程的工作内存对volatile修饰的变量进行缓存. volatile 2个使用场景: 1.可见性:Java提供了volatile关键字来保证可见性. 当一个共享变量被volatile修饰时,它会保证修

  • C语言中的const和free用法详解

    注意:C语言中的const和C++中的const是有区别的,而且在使用VS编译测试的时候.如果是C的话,请一定要建立一个后缀为C的文件,不要是CPP的文件.因为,两个编译器会有差别的. 一.C语言中的const比较常见的用法,const做常量 #include<stdio.h> #include<malloc.h> #include<string.h> /* C中的const用法(使用VS测试的时候,要注意建立一个C后缀的文件,因为C的编译器和C++的编译器还是有区别的

  • MySQL中ESCAPE关键字的用法详解

    MySQL转义 转义即表示转义字符原来的语义,一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义. MySQL中,转义字符以"\"开头,编程中常见的转义字符,在MySQL均是有效的,在此不做赘述和讨论.在此,主要通过"%" 和 "_"来对ESCAPE关键字的作用进行说明. %:匹配任意多个字符. _:匹配单一字符. 如果我们要匹配"%"或者"_"时,就必须

  • Java instanceof关键字用法详解及注意事项

    instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为: boolean result = obj instanceof Class 其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false. 注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,

随机推荐