C与C++的const关键字

之所以要谈const,大概就是被const出现的各种位置搞得头晕目眩了罢。

(一)C语言中的const关键字

C语言中const修饰的变量或对象的值不能更改。

比如定义const int i = 0;(或int const i = 0;)那么之后任何对i进行改变的操作都会报错。

当然可以投机取巧地去修改const类型的值,比如取得i的指针然后对指针进行操作

    const int i = 0;
    int * p = &i;
    *p = 3;

const也可以修饰指针类型,这就产生了比较麻烦的情况,那就是判断const修饰的到底是指针还是变量。

判断const修饰谁的方法:先忽略类型名再看const离谁近

    const int *p1;         //const修饰*p1,*p1不可变,但是p1可变
    int const *p2;         //const修饰*p2,*p2不可变,但是p2可变
    int * const p3;        //const修饰p3,p3不可变,但是*p3可变
    const int * const p4;  //第一个const修饰*p4,第二个const修饰p4,p4和*p4均不可变

在调试窗口中查看可以发现,p1和p2都是const int*类型,p3是int * const类型,p4是const  int * const类型

const修饰符也可以修饰函数的返回值

比如 const int fun(); 返回的就是const int类型,同理const int * fun();返回的是const int *类型

const修饰符也可以修饰函数参数

如果参数用于输出,那么无论是采用指针传递还是引用传递都不能加const修饰,因为const变量不能作为左值

作为输入参数时,如果采用值传递,由于函数将自动产生临时变量复制该参数,所以用不用const没有意义。如果采用指针传递,加const可以防止函数体内部对该参数进行改变。比如C标准库函数strcpy的声明为char *__cdecl strcpy(char *_Dest, const char *_Source),用const修饰源字符串防止对原字符串进行修改。

const也可以外部声明。例如在a1.c中定义int i = 0; 在a2.c中若声明extern const int i;那么i在整个程序中都是const int类型。

(二)C++中的const关键字

在C语言中const修饰的变量是只读变量而不是常量,所以在C语言中即使定义const int n = 10;定义数组int A[n];就会报错,但是在C++中const相当于把一个变量转化成了常量,所以C++中这么写是合法的。所以在C语言中往往是用#define 变量名 变量值来定义一个值替代,但是这样缺乏类型检测机制,在C++中成为可能引发错误,所以在C++里往往用const替代#define。

在C++里const还有个不同于C语言的作用就是在类的成员函数中限定函数类型,成员函数末尾添上const则代表该函数无法改变类的成员变量的值。

class A
{
public:
    int n;
    void fun() const
    {
        n++;   //报错,修改了成员变量n
    }
};

在C++中const也可以修饰引用型参数,引用相当于给变量起别名,不像值传递那样构造、复制、析构一个临时对象,但是一旦作为参数的引用对象发生了改变,原参数也会发生改变,如果为了避免引用对象被不小心改变,可以用常引用类型即const Type &作为参数。

C与C++的const关键字

时间: 2024-10-13 14:16:45

C与C++的const关键字的相关文章

C++ 类中的const关键字

//类中的const关键字 #include<iostream> using namespace std; class Point{ public: //这个const关键字本质上修饰的是this指针 int GetX() const //====>int GetX(const this) { //因为this被隐藏,所以const关键字只好写在函数后面 //x++; //加上const关键字 报错 error C3490: 由于正在通过常量对象访问“x”,因此无法对其进行修改 //这个

c语言const关键字

作者:沉默羔羊 c语言const关键字: --  特点. 使用该关键修饰的变量不能被改变.      --指针常量. demo:   const char *p或者是 char const * p --常量指针. demo: char * const p      --常量指针和指针常量. 1.常量指针指的是如 char * const p, p是一个常量,p不能改变指向. 2.指针常量指的是如char const *p,   p指向一个字符常量,p可以改变指向.但是不能改变*p. --对于常量

const关键字详解

const在函数前与函数后的区别 一   const基础         如果const关键字不涉及到指针,我们很好理解,下面是涉及到指针的情况:         int   b   =   500;     const   int*   a   =   &b;              [1]     int   const   *a   =   &b;              [2]     int*   const   a   =   &b;              [3

c++中const关键字全面总结

一.const作用 1.const定义常量 注意:const只对它左边的东西起作用,唯一的例外就是const本身就是最左边的修饰符,那么它才会对右边的东西起作用. (1)const修饰变量,以下两种定义形式在本质上是一样的.它的含义是:const修饰的类型为TYPE的变量value是不可变的. TYPE const ValueName = value; const TYPE ValueName = value; (2)将const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行初

详解C和C++中的const关键字

在讲下面的内容之前,要先看看这篇文章const.static变量的存储位置 一.C中的const 作用:(1)可以定义const常量,具有不可变性. (2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患. (3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改. 同宏定义一样,可以做到不变则已,一变都变! (4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性. 还是上面的例子,如果在函数体内修改了i,编译器就会报错: (5) 可以节省空间,避免不必要的内存

C语言之头文件,static与const关键字

[前言] 最近几个月在做一个C语言代码重构的项目,过程中也让我对之前在书本上学习到的东西有些补充和巩固,在本博中总结记录下,梳理下零碎的知识点和经验也加深印象,书写是为了更好地思考.平时也都是用印象笔记之类的自己写写笔记,今天整理成博客,以便自己以后回顾. [正文] C语言头文件:将其理解为C语言模块化编程向外提供一个接口描述文件.一般包括一些供外部函数或者文件使用的变量声明,函数声明,数据类型定义以及宏定义等.举例: /*************************************

C 语言 const 关键字

#include <stdio.h> int main(void){ int i = 1; int j = 100; const int * temp = &i; printf("%d\n",*temp); i = 2; printf("%d\n",*temp); temp = &j; printf("%d\n",*temp); return 0; } 输出 12100 #include <stdio.h>

final关键字+const关键字

final关键字 1.如果我们希望某个类不被其它的类来继承(可能因为安全考虑),可以使用final. 例题 <? final class A{} class B extends A{};//会报错 echo "OK"; ?> 2.如果我们希望某个方法,比如计算个人所得税的方法,不能子类改写,可以使用final来修饰方法. 例题 <?php class A{ final public function getRate($salary){ return $salary*0

static和const关键字

static关键字至少有下列n个作用:   (1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值:   (2)在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问:   (3)在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内:   (4)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝:   (5)在类中的stat

一起talk C栗子吧(第一百六十四回:C语言实例--const关键字)

各位看官们,大家好,上一回中咱们说的是三目运算符的例子,这一回咱们说的例子是:const关键字 .闲话休提,言归正转.让我们一起talk C栗子吧! 我们在前面章回中介绍了很多系统编程接口,在这些接口的参数中经常出现const关键字,有看官对此提出了疑问"这些const有什么用处呢?".今天,我将和大家一起来解决该疑问. 在C语言中const是一种修饰符,经常用来修饰变量.使用它修饰以后的变量,就成为常量.常量是不允许被修改的.下我们举个简单的例子来说明const的用法. 1 #inc