const 订阅
const是一个C语言(ANSI C)的关键字,具有着举足轻重的地位。它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一定帮助。另外CONST在其它编程语言中也有出现,例如Pascal、C++、PHP5、B#.net、HC08 C、C#等。 展开全文
const是一个C语言(ANSI C)的关键字,具有着举足轻重的地位。它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一定帮助。另外CONST在其它编程语言中也有出现,例如Pascal、C++、PHP5、B#.net、HC08 C、C#等。
信息
外文名
const
运用领域
C++、PHP5
作    用
提高程序的安全性和可靠性
所属领域
计算机
释    义
限定一个变量不允许被改变,产生静态作用
中文名
C语言的关键字
CONST定义
const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。
收起全文
精华内容
下载资源
问答
  • const
    万次阅读 多人点赞
    2019-05-02 20:11:46

    const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。

    目的

    编辑

    const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。

    主要作用

    编辑

    (1)可以定义const常量,具有不可变性。 
      例如:const int Max=100; Max++会产生错误; 
      (2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。
      例如: void f(const int i) { .........} 编译器就会知道i是一个常量,不允许修改; 
      (3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。 同宏定义一样,可以做到不变则已,一变都变!
      如(1)中,如果想修改Max的内容,只需要它修改成:const int Max=you want;即可!

    (4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。 还是上面的例子,如果在函数体内修改了i,编译器就会报错; 
      例如: void f(const int i) { i=10;//error! } 
      (5) 可以节省空间,避免不必要的内存分配。 例如: 
      #define PI 3.14159 //常量宏 
      const double Pi=3.14159; //此时并未将Pi放入ROM中 ...... 
      double i=Pi; //此时为Pi分配内存,以后不再分配! 
      double I=PI; //编译期间进行宏替换,分配内存 
      double j=Pi; //没有内存分配 
      double J=PI; //再进行宏替换,又一次分配内存! 
      const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干份拷贝。 
      (6) 提高了效率。 
      编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

    变量与常量

    编辑

    例:为什么下面的例子在使用一个const变量来初始化数组,ANSI C的编译器会报告一个错误呢?

    const int n = 5;

    int a[n];

    答案与分析:

    1)这个问题讨论的是“常量”与“只读变量”的区别。常量,例如5, "abc",等,肯定是只读的,因为常量是被编译器放在内存中的只读区域,当然也就不能够去修改它。而“只读变量”则是在内存中开辟一个地方来存放它的值,只不过这个值由编译器限定不允许被修改。C语言关键字const就是用来限定一个变量不允许被改变的修饰符(Qualifier)。上述代码中变量n被修饰为只读变量,可惜再怎么修饰也不是常量。而ANSI C规定数组定义时长度必须是“常量”(C99标准,数组下标可以用变量来表示),“只读变量”也是不可以的,“常量”不等于“不可变的变量”。但是在C++中,局部数组是可以使用变量作为其长度的。

    2)但是在标准C++中,这样定义的是一个常量,这种写法是对的。实际上,根据编译过程及内存分配来看,这种用法本来就应该是合理的,只是ANSI C对数组的规定限制了它(实际上用GCC或VS2005编译以上代码,确实没有错误产生,也没有给出警告)。

    3)那么,在ANSI C中用什么来定义常量呢?答案是enum类型和#define宏,这两个都可以用来定义常量。

    限定内容

    编辑

    例:下面的代码编译器会报一个错误,请问,哪一个语句是错误的呢?

    typedef char * const pStr;

    char string[4] = "bbc";

    const char *p1 =" string"; //1式

    const pStr p2 =" string"; //2式

    p1++;

    p2++;

    答案与分析:

    问题出在p2++上。

    1)const使用的基本形式: const type m;限定m不可变。替换基本形式中的m为1式中的*p1,替换后const char *p1;限定*p1不可变,当然p1是可变的,因此问题中p1++是对的。替换基本形式中的type为2式中的pStr,替换后const pStr m;限定m不可变,题中的pStr就是一种新类型,因此问题中p2不可 [1]  变,p2++是错误的。

    指针举例

    编辑

    例一

    下面分别用const限定不可变的内容是什么?

    1)const在前面

    const int nValue; //int是const

    const char *pContent; //char是const, pContent可变

    const char* const pContent; //pContent和*pContent都是const

    2)const在后面,与上面的声明对等

    int const nValue; //nValue是const

    char const * pContent; //*pContent是const, pContent可变

    char* const pContent; //pContent是const,*pContent可变

    char const* const pContent; //pContent和*pContent都是const

    答案与分析:

    const和指针一起使用是C语言中一个很常见的困惑之处,在实际开发中,特别是在看别人代码的时候,常常会因为这样而不好判断作者的意图,下面讲一下我的判断原则:

    const只修饰其后的变量,至于const放在类型前还是类型后并没有区别。如:const int a和int const a都是修饰a为const。注意*不是一种类型,如果*pType之前是某类型,那么pType是指向该类型的指针

    一个简单的判断方法:指针运算符*,是从右到左,那么如:char const * pContent,可以理解为char const (* pContent),即* pContent为const,而pContent则是可变的。 [1] 

    例二

    int const * p1,p2;

    p2是const;(*p1)是一整体,因此(*p1)是const,但p1是可变的。int * p1,p2只代表p1是指向整型的指针,要表示p1、p2都是指针是需写成int * p1,* p2。所以无论是* const p1,p2还是const * p1,p2,里面的*都是属于p1的。

    例三

    int const * const p1,p2;

    p2是const,是前一个const修饰的,*p1也被前一个const修饰,而p1被后一个const修饰。

    例四

    int * const p1,p2;

    p1是const,(* const p1)是整体,所以const不修饰p2。

    例五

    指针指向及其指向变量的值的变化

    const在*的左边,则指针指向的变量的值不可直接通过指针改变(可以通过其他途径改变);在*的右边,则指针的指向不可变。简记为“左定值,右定向”。

    1)指针指向的变量的值不能变,指向可变

    int x = 1;

    int y = 2;

    const int* px = &x;

    int const* px = &x; //这两句表达式一样效果

    px = &y; //正确,允许改变指向

    *px = 3; //错误,不允许改变指针指向的变量的值

    2)指针指向的变量的值可以改变,指向不可变

    int x = 1;

    int y = 2;

    int* const px = &x;

    px = &y; //错误,不允许改变指针指向

    *px = 3; //正确,允许改变指针指向的变量的值

    3)指针指向的变量的值不可变,指向不可变

    int x = 1;

    int y = 2;

    const int* const px = &x;

    int const* const px = &x;

    px = &y; //错误,不允许改变指针指向

    *px = 3; //错误,不允许改变指针指向的变量的值

    补充

    在c中,对于const定义的指针,不赋初值编译不报错,

    int* const px;这种定义是不允许的。(指针常量定义的时候对其进行初始化)

    int const *px;这种定义是允许的。(常指针可以再定义的时候不初始化)

    但是,在C++中

    int* const px;和const int* const px;会报错,const int* px;不报错。

    必须初始化指针的指向int* const px = &x;const int* const px=&x;

    强烈建议在初始化时说明指针的指向,防止出现野指针!

    更多相关内容
  • 02-ES6语法:const常量

    万次阅读 2022-03-26 14:35:56
    文章介绍了ES6语法新引入的用来定义常量的const关键字,以及在代码中如何定义常量,并且常量的一些使用规则。

    ES6标准中增加了新的关键字const来定义常量。使用const定义的常量,在后续的代码中将无法被改变。

    下面是简单的屏幕分享,不爱看文字的同道中人可以看视频。-_-

    一、基本常量

    首先我们来看下如何通过这个关键字定义常量,代码如下:

    <script>
        const PI = 3.14159;
        console.info(PI);
    </script>

    上面的代码就是通过const定义了一个PI的常量,可以在控制台输出这个数值。

    接下来我们做个实验,尝试修改PI这个常量的数据,看看会发生什么反应。代码如下:

    <script>
        const PI = 3.14159;
        PI = 3.14;
        console.info(PI);
    </script>

    上述的代码,在代码编辑中并没有报错,但是运行的时候,控制台输出如下的内容:

     通过上面的错误信息可以得知,当我们在代码中尝试给常量重新赋值的时候,就会出现这样的错误。

    二、对象常量

    除了上面的例子,我们通过const定义了一个普通的常量以外,也可以定义对象常量。如下代码所示:

    <script>
        const user = {
            userName: "光脚丫思考",
            blog: "https://blog.csdn.net/gjysk",
        };
        console.info(user);
    </script>

    上面通过const定义的对象常量,同样也不能直接去修改常量对对象的引用,但是可以修改对象的属性值。我们显示尝试直接修改对象的引用,代码如下:

    <script>
        const user = {
            userName: "光脚丫思考",
            blog: "https://blog.csdn.net/gjysk",
        };
        user = {
            userName: "光脚丫思考",
        };
        console.info(user);
    </script>

    上图的代码会在控制台上产生如下的错误:

     可以看到,这个错误和前面的完全一样。但是,我们可以对对象的属性进行修改,其实道理很简单,对象的属性我们并没有定义为常量。代码如下:

    <script>
        const user = {
            userName: "光脚丫思考",
            blog: "https://blog.csdn.net/gjysk",
        };
        user.userName = "光脚丫思考-修改";
        console.info(user);
    </script>

    上述代码就可以被正常的执行。

    展开全文
  • 使用Visual Studio 2019时经常会出现const char* 类型的实参与char* 类型的形参不兼容。对此有两种解决办法。 2 解决方法 法1 将结构体中定义的 char * 前面加上 "const"修饰,具体如下所示: #include <iostream...

    1 前言

    使用Visual Studio 2019时经常会出现const char* 类型的实参与char* 类型的形参不兼容。对此有两种解决办法。

    2 解决方法

    法1 将结构体中定义的 char * 前面加上 "const"修饰,具体如下所示:

    #include <iostream>
    using namespace std;
     
    class Student {
    public:
    	//char *name;				//错误!!!
    	const char *name;		//需要在这里写上 const
    	int age;
    	float score;
     
    	void say() {
    		cout << name << "的年龄是" << age << ",成绩是" << score << endl;
    	}
    };
     
    int main() {
    	Student *pStu = new Student;
    	pStu->name = "小明";
    	pStu->age = 15;
    	pStu->score = 92.5f;
    	pStu->say();
    	delete pStu;  //删除对象
     
    	getchar();
    	return 0;
    }
    

    法2 在Visual Studio 2019右侧栏创建的项目上右击“项目名称”——>“属性”——>“C/C++”——>“语言”,将“符合模式”改为“否”即可。如下所示:
    在这里插入图片描述

    展开全文
  • 一、const是什么 const是C/C++中的类型修饰符。 二、const的作用 1、对变量声明只读特性,保护变量值以防被修改 2、节省空间,避免不必要的内存分配。const修饰的变量在程序运行过程中只有一份拷贝 3、提高...

    一、const是什么

        const是C/C++中的类型修饰符。

    二、const的作用

        1、对变量声明只读特性,保护变量值以防被修改。

        2、节省空间,避免不必要的内存分配。const修饰的变量在程序运行过程中只有一份拷贝。

        3、提高程序运行效率。编译器不为普通const常量分配存储空间,而是将他们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储和读取内存的操作。

    三、const的使用

        1、const和普通变量

           (1)编译器在编译过程中把用到const变量的地方都替换成对应的值。为了执行这个操作,编译器必须知道const变量的初始值, 如果程序包含多个文件,则每个用了该const变量的文件,都必须能访问到它的初始值才行,要做到这一点,就必须在每一个用到该const变量的文件中都有对它的定义或声明。   

                    默认状态下,const变量仅在文件内有效,当多个文件中出现了同名的const变量时,等同于在不同文件中分别定义了独立的const变量

                    定义一个const变量

            const type value_name = value;

           (2)对于有必要在文件间共享的const变量,在const变量定义和声明时添加extern关键字即可。

                    例如:

                    在test_extern_const.cpp中定义并初始化一个可被外部访问的const变量

            extern const int test_extern_const = 0;

                    在test_extern_const.h中声明变量extern_const_test和函数print_test_extern_const_value

            #ifndef _TEST_EXTERN_CONST_H
            #define _TEST_EXTERN_CONST_H
    
            extern const int test_extern_const;
    
            #endif

                      在main.cpp中使用变量test_extern_const

            #include <iostream>
            #include "test_extern_const.h"
            using namespace std;
    
            int main() {
                cout<<"test_extern_const value is "<<test_extern_const<<endl;
                return 0;
            }

                从main的运行结果可以看到,const变量test_extern_const被外部文件成功访问

                         

        2、const和引用

                   把引用绑定到const变量上,称为对常量的引用。与普通引用不同的是,对常量的引用不能修改它绑定的变量的值。

                   常量引用仅对引用可参与的操作做出了限定,对于引用的变量本身是不是一个常量未做限定。

            const int test_const = 0;
            const int &reference_to_const = test_const;

        3、const和指针

            (1)指向常量的指针

                     指向常量的指针没有规定其所指向的变量必须是一个常量。指向常量的指针仅仅要求不能通过该指针改变变量的值。

            const double value_name_1 = value;
            const double *pointer_to_const_1 = &value_name_1;
    
            double value_name_2 = value;
            const double *pointer_to_const_2 = &value_name_2; 

            (2)常量指针

                     指针本身为常量,常量指针必须初始化,一旦初始化完成,它的值就不能再改变了。即不变的是指针本身的值而非指向的那个值。

            int value_name = value;
            int *const const_pointer = &value_name;

    展开全文
  • static和const的作用与区别

    千次阅读 多人点赞 2022-01-22 10:31:30
    const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。 我们先来说static. static主要有三个作用: 1.修饰局部变量,成为静态局部变量 2.修饰全局变量,成为...
  • var、let、const的区别

    万次阅读 多人点赞 2021-10-29 16:21:31
    const声明 const的行为与let基本相同,唯一一个重要的区别是: const是用来定义常量的,而且定义的时候必须赋值,不赋值会报错,定义之后是不允许被修改的,修改const声明的变量会导致运行时错误。 const age = 26;...
  • C语言中const的用法

    千次阅读 2022-04-13 20:23:22
    本文介绍了const的基本用法,单独使用const的说明,const与指针的结合使用,以及const与#define的区别,并附上实例帮助读者理解
  • C++ const 修饰符

    千次阅读 多人点赞 2021-05-04 12:17:03
    C++ const 修饰符是什么, const 修饰符的用途以及规范.
  • 2、在前面加上const const char* image_window = "Source Image"; const char* result_window = "Result window"; 3、右键project -> 属性 -> C/C++ -> 语言 -> 符合模式:否 4、对变量进行强转 char* image_window...
  • const char * 、char const *、 char * const 三者的区别

    万次阅读 多人点赞 2018-06-23 12:46:23
    const char *ptr; char const *ptr; char * const ptr; 现整理三者之间的区别与联系。 一、const char *ptr; 定义一个指向字符常量的指针,这里,ptr是一个指向 char* 类型的常量,所以不能用ptr来修改所指向...
  • let和const与var的区别

    千次阅读 2022-02-12 09:16:36
    三、const 四、代码演示 四、循环中let和var声明的循环变量的区别 4.1 事件的绑定 4.2 循环变量存储的数据数值 4.2.1 var声明的循环变量 4.2.1 var声明的循环变量 一、定义 let和const是ES6新增的声明变量的...
  • var 、let 和 const 的区别

    千次阅读 2022-03-26 04:50:36
    var 声明的范围是函数作用域,let 和 const 声明的范围是块作用域 var 声明的变量会被提升到函数作用域的顶部,let 和 const 声明的变量不存在提升,且具有暂时性死区特征 var 允许在同一个作用域中重复...
  • const用法详解

    万次阅读 多人点赞 2018-06-19 15:43:41
    首先我们来了解一下现在所学的C标准,分别是C89、C99和C++99,C89标准的C语言中的const和C++中的const是有区别的,而在C99标准的C语言中是相同的。我们目前所学的C语言标准为C89标准。 const修饰的量为一个常量即...
  • const和readonly有什么区别? 都可以标识一个常量。主要有以下区别: 1、初始化位置不同。const必须在声明的同时赋值;readonly即可以在声明处赋值; 2、修饰对象不同。const即可以修饰类的字段,也可以修饰局部变量...
  • var、let、const的区别以及用法

    千次阅读 2022-03-15 23:33:35
    // ReferenceError: i 没有定义 const声明 const与let基本相同,区别是const是用来定义常量的,尝试修改const声明的变量会导致运行上报错。const也不可以重复声明,const也是块级作用域。如: //赋值 const name =...
  • C++ const和constexpr详解

    千次阅读 多人点赞 2022-04-02 10:48:09
    使用变量的好处是当我们觉得变量值不合适时可以随时调整,但是这也会带来弊端,比如容易无意间改变了它的值,为了避免这种情况,可以用关键字const对变量的类型加以限定。 但是使用const进行声明时,我们需要人为的...
  • MySQL查询语句explain时出现Impossible WHERE noticed after reading const tables
  • c++中const的作用

    万次阅读 多人点赞 2019-04-04 17:30:13
    const关键字的作用 (1)作用: 1)欲阻止一个变量被改变,可使用const,在定义该const变量时,需先初始化,以后就没有机会改变他了; 2)对指针而言,可以指定指针本身为const,也可以指定指针所指的数据为const...
  • C++——const详解

    千次阅读 2022-06-29 13:12:02
    指针常量(顶层const): 本质是一个常量的指针,指针指向的地址不能改变,该地址存储的数据可以改变。常量指针(底层const): 指向常量的指针,,a是一个常量,p指向a的地址空间,a的值不能变,p的指向可以改变。更...
  • char * 和const char *的区别

    千次阅读 2021-11-03 09:46:24
    const char*表示一个限定不会被改变的指针变量。 二、模式的不同 char*是常量指针,地址不可以改变,但是指针的值可变。 const char*是指向常量的常量指针,地址与值均不可变。 三、指针指向的内容的不同 char*...
  • const函数

    千次阅读 2022-01-12 15:24:43
    const是衡量一个程序员是否老道的一个标准,除了修饰变量之外,还可以修饰函数,主要有以下几种形式 const int& fun(int& a); //修饰返回值 int& fun(const int& a); //修饰形参 int& fun(int...
  • const_cast来去除const限定 传统转换方式实现const_cast运算符 为何要去除const限定 前面讲了C++继承并扩展C语言的传统类型转换方式,最后留下了一些关于指针和引用上的转换问题,没有做详细地讲述。C++相比于C...
  • const int *p 和 int *const p

    千次阅读 2022-01-21 20:15:32
    网上很多帖子以及很多相关书籍对指针的命名都很粗暴地从右往左读,本人初学时也的确被“吓”到了,尤其是const int *p指针常量,而int *const p常量指针。偶然看到了一篇文章对其有详细的解释。 const int *p:指向...
  • 【C++】运算符重载关于const的分析(超详细)

    千次阅读 多人点赞 2020-02-23 20:24:56
    C++运算符重载重载运算符“+”第1个const第2个const第3个const重载运算符“-”重载运算符“-”(与上面的含义不同)重载运算符 “+=” 与 “-=”重载运算符 “==” 与 “!=”重载运算符 “++” 与 “--”重载 “<...
  • Java如何实现const

    千次阅读 2021-02-12 11:16:04
    展开全部const是constant的缩写,“恒定不变”的意思。被const修饰的东西都受到强制保护,可以预防意外的变动,能提62616964757a686964616fe59b9ee7ad9431333337396235高程序的健壮性和高效性。1 用const修饰函数的...
  • vue中const的使用

    万次阅读 2020-05-09 11:49:10
    const的作用就是将变量声明为一个常量,不能被修改,不可以再次赋值,它的指向是不可以改变的,只能指向某处固定区域,不能再指向其它地方 在ES6开发中,优先使用const,只有需要修改某个标识符值的时候采用let 1....
  • C语言const用法详解(带实例)

    千次阅读 2021-03-27 21:40:06
    const与define区别 在C语言中const常用来定义常量,表示这个常量是不可以被修改的。define宏定义也可以用来表示一个常量。那么他们有那些区别呢! 1、预编译指令只是对值进行简单的替换,不能进行类型检查 2、...
  • js中const,var,let区别与用法

    万次阅读 多人点赞 2018-07-09 10:48:04
    今天第一次遇到const定义的变量,查阅了相关资料整理了这篇文章。主要内容是:js中三种定义变量的方式const, var, let的区别。1.const定义的变量不可以修改,而且必须初始化。1 const b = 2;//正确 2 // const b;/...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,072,442
精华内容 1,628,976
关键字:

const