展开

关键词

const总结

constconst修饰的变量是不能改变的const修饰变量时,必须在声明变量的同时给出初始化(类中的const成员变量不一样)顶层const与底层const顶层const定义为变量本身是一个常量 ,因此对一切的内置类型常量而言,所有的const都是顶层const对指针来说,常量指针是顶层const,对于引用则没有顶层const的概念。 底层const只在指针和引用上有效,其定义是该指针指向或该引用绑定的对象是常量。因此:顶层const和底层const,引用只有底层constconst指针不能修改指针的指向 b = c; 底层const指针可以指向顶层const指针(顶层const可以赋值给底层const) c = b; 底层const指针不可以赋值给顶层const指针 const int& e = a; 引用的底层const e = 1000; 错误,引用的底层const不能修改值 const int* const f = &aa; 同时被顶层和底层const封锁的指针既不能修改其指向

21310

AboutCPlusPlus之const

const int a = 5;int const b = 5;const int arr1 = {1,2,3};int const arr2 = {1,2,3}; 来看一些对 const 变量的操作: const int a = 10;a = 11; 错误:不能为 const 变量赋新值int &b = a; 错误:不能为 cosnt 变量绑定 non-const 引用const int &c = a; 正确int *d = &a; 错误:不能为 const 变量绑定指向 non-const 的指针const int *e = &a; 正确 const 与 define 宏定义的区别:处理阶段不同 类型和安全检查不同:define 没有类型,不做检查,仅仅是符替换;const常量有明确的类型,在编译阶段进行类型检查;存储方式不同:define 是符替换,有多少地方使用,就会替换多少次,不会分配内存 如果有个成员函数想修改对象中的某一个成员变量,可以使用 mutable 修饰这个成员变量:#includeusing namespace std;class Test{public: Test(int

17430
  • 广告
    关闭

    腾讯云前端性能优化大赛

    首屏耗时优化比拼,赢千元大奖

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    const应用总结

    C++中的const的用法非常灵活,而使用const将大大改善程序的健壮性,const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的 1 概述 C++中的const的用法非常灵活,而使用const将大大改善程序的健壮性,通过查阅资料,将const作用归纳如下:可以定义const常量const int Max = 10;便于进行类型检查 编译器可以对前者进行类型安全检查,而对后者只进行符替换,没有类型安全检查,并且在符替换时可能会产生意料不到的错误;void f(const int i) { .........}对传入的参数进行类型检查 类相constconst修饰成员变量const修饰类的成员函数,表示成员常量,不能被修改,同时它只能在初始化列表中赋值。 对于const类对象指针引用,只能调用类的const成员函数,因此,const修饰成员函数的最重要作用就是限制对于const对象的使用。const成员函数不被允许修改它所在对象的任何一个数据成员。

    8810

    ES6 语法详解(const)

    ** * const * 作用: * 定义一个常量 * 特点: * 不能修改 * 其他特点同let * 应用: * 保存不能被改变的数据,也就是常量 * 不能修改 修改会报错 const appName

    7220

    const到底该什么用

    前言我们都知道使用const限定一个变量为只读,但它是真正意义上的只读吗?实际中又该如何使用const?在解答这些问题之前,我们需要先理解const的基本使用。 const int arr等价const该怎么用前面介绍了这么多内容,是不是都常用呢? const到底该怎么用? 是给编译器用的,帮助程序员提早发现可能存在的问题。 总结介绍了这么多,点如下:const让编译器帮助我们发现变量不该被修改却被意外修改的错误。const修饰的变量并非真正意义完完全全的只读。

    23820

    4.C++程序设计——const

    1.定义常量const int MAX_VAL = 23;const double Pi = 3.14;2.定义常量指针不可通过常量指针修改其指向的内容int n,m;const int *p = &n ;*p = 5; 编译错误n = 4; 正确p = &m; 正确,可以改变常量指针指向的对象不能把常量指针赋值给非常量指针,反过来可以const int * p1; int * p2;p1 = p2;正确 p2 = p1;错误p2 = (int *)p1;正确,通过强制类型转换函数参数为常量指针时,可避免函数内部不小心改变参数指针所指地方的内容void MyPrintf(const char *p){ strcpy (p,this);编译错误 printf(%s,p);正确}strcpy()第一个参数类型是char* ,相当于把 const char * 类型复制给char * 所以会报错。 3.定义常引用不能通过常引用修改其引用的变量int n;const int & r = n;r = 5;编译错误n = 4;正确

    9510

    C语言: const与指针

    const修饰指针的4种形式const,在C语言中用来修饰变量,表示这个变量是常量。const修饰指针有4种形式,区分清楚这4种即可全部理解const和指针。 第一种:const int *p;第二种:int const *p;第三种:int * const p;第四种:const int * const p; 第一种const int *p1; p本身不是 cosnt的,而p指向的变量是const的 第二种int const *p2; p本身不是cosnt的,而p指向的变量是const的 第三种int * const p3; p本身是cosnt的,p ’ p4 = &a; error: assignment of read-only variable ‘p4’*p4 = 5; error: assignment of read-only loc于指针变量的理解 一个const只能修饰一个变量,所以弄清楚这4个表达式的就是搞清楚const放在某个位置是修饰谁的const修饰的变量真的不能改吗?

    11010

    【面试宝典】C++中const的用法

    对于刚毕业的应届生来说面试中经常被问到const的用法,小编在这里为大家总结如下:修饰常量 用const修饰的变量某种意义上就是常量,编译器会对它进行必要的操作比宏定义多了类型修饰符。 修饰指针(1)const int *p;p指针const int的指针,不能用赋值语句对*p赋值,但是可以对p赋值。(2)int* const p=&j; p是指向int的const指针。 p是const数据,所以其本身不可改变,而*p可以被赋值。(3)const int * const p=&i;p是一个const指针,其指向const数据i。p、*p都不能再被赋值。 不能被更改; 放在参数前修饰参数表示该参数必须保持其常量性,不能在函数体内被修改;(2)类成员函数 放在类成员函数尾部,表示其在函数内并不修改对象的属性,只是读取等操作非更易型操作修饰类对象当类的对象被声明为const 类型后,它只能调用用const修改的成员函数。

    34050

    C++与C中的const有何差别?

    前言在《const到底该怎么用》一文中介绍了C语言中的const,本文说说C++中的const,它的大部分特点和C语言中的类似,所以本文主要针对不同之处。 与C语言中const不同的是,C++中使用const定义的b变量的值在被改变时会被检测。 因为前者传递指针的副本,指针指向不会被改变,但可以改变指向的内容;但是int类型参数,它也是传递副本,但是永远不会被函数改变,自然也没有必要加const。更多解释可以参考《传值和传指针》。 总结const在C和C++中的区别,想必到这里你已经清楚了。const通常能借助编译器帮助我们提前发现一些不易察觉的问题。 如果你对下面的问题还不清楚,建议阅读《const到底该怎么用》你能分清下面的声明区别吗?const int *p; int * const p;int const * const p;

    27700

    C语言中const的妙用总结

    交流、咨询,有疑问欢迎添加QQ 2125364717,一起交流、一起发现问题、一起进步啊,哈哈哈哈哈 学习了多年的C语言,你对const的使用全都掌握了吗? C语言中const是constant的缩写,通常翻译为常量、常数等,有些朋友一看到const马上就想到了常量。事实上在C语言中const功能很强大,它可以修饰变量、数组、指针、函数参数等。 定义形式也可以写成int const i=5,同样正确。 此外,const修饰变量还起到了节约空间的目的,通常编译器并不给普通const只读变量分配空间,而是将它们保存到符号表中,无需读写内存操作,程序执行效率也会提高。 4、 修饰函数参数const修饰函数参数,对参数起限定作用,防止其在函数内部被修改。所限定的函数参数可以是普通变量,也可以是指针变量。

    13620

    C++:18---const(附常量指针、指针常量、常量指针常量)

    一、const变量的一些基本特点①const修饰的变量不能被修改const int a=10;a=20;错误②因为const修饰的变量不能被修改,所以必须被初始化int a=10;const int b=a; 正确const int c=10; 正确③const修饰的变量可以赋值给其他值const int a=10;int b=a;正确④可以有常量引用int a=10;const int &b=a; 二、在其他文件中使用const常量(extern)const常量默认只能在当前文件使用,可以使用extern使const常量在文件中共享注意:在别的文件中使用const常量时,如果出现同名时:①其他文件的局部变量会覆盖 1)②允许为一个常量引用绑定非常量的对象、面值、甚至是个一般表达式(见下面代码段2)代码段1double dval = 3.14;const int &ri = dval;正确*上面的代码会生成一个int int const* pb; 常量指针int * const pc; 指针常量int const* const pd;常量指针常量如果通过const的位置来判断const对什么起作用: const对左边的类型起作用

    18710

    const你搞懂了?这个编译问题你可能都搞不明白!

    const说到const,在《const到底该怎么用》和《C++中的const与C中的const有何差别?》 中已经分析过了,这里简单说一下,被const修饰的变量,表明它是只读的,不希望被修改。 externextern可以引用外部的定义,想必很多朋友已经很熟悉了,举个例子,如果把最开始的例子中的const去掉,main.cc中的extern的意思,就是说有一个const_int 当然,还有一个不太被注的作用是,在C++中,它可以改变const变量的链接属性。是的,在C++中,它改变了const_int的链接属性。 总结本文从一个编译问题,引出了很多内容,包括:作用域 --《全局变量,静态全局变量,局部变量,静态局部变量》const--《const到底该怎么用》externnm查看符号表

    20020

    static const volatile __weak解析

    这篇文章较为基础,笔者在这里写下来作为对以前知识的一个回顾static对于 static 来讲,它既可以用来修饰变量同时也可以用来修饰函数,而变量从大的方向上来讲又分为局部变量和全局变量,static ,ptr指向的对象可变*const int *const ptr;*ptr和ptr指向的对象均不可变*笔者最开始看到这四条语句的时候,头很昏,老是记不清楚谁是谁,直到我在 C 语言深度剖析中看到的于分辨这个的方法之后 修饰函数参数const 也可以用于修饰函数参数,最为直观的一个例子是如果函数参数采用“指针传递”的方式,那么加入 const 参数可以防止意外地改动该指针,起到保护作用,比如如下符串拷贝的一个函数原型 笔者最开始注意到这个是在使用 STM32 HAL 库的时候注意到的,比如如下这张图片所示: ? 总结合理地使用修饰函数或者变量,能够帮助我们写出更加稳定和更加健壮的代码,应该充分理解每个具体的含义。

    7810

    C语言(const

    const是C语言中最坑爹的,典型挂羊头卖狗肉,const本意是常量,但是C语言const只能用来定义只读变量。 拓展:const在C语言中的作用,基本都是用来修饰指针的,而且都是前置修饰:const int *p = &a; 前置修饰int *const p = &a; 后置修饰前置修饰时,我们可以通过指针p

    49920

    C#基础知识系列八(const和readonly

    前言  不知道大家对const和readonly这两个的区别有什么了解,原来自己之前还真不清楚它们到底是怎么回事,那么如果你也不是很清楚的话,可以一起来探讨一下。 在了解这两个的时候我们先来了解一下静态常量和动态常量。 静态常量:是指编译器在编译时候会对常量进行解析,并将常量的值替换成初始化的那个值。   因为需要保存常量,所以有内存消耗   5、const只能修饰基元类型、枚举类、或者符串类型;readonly却没有这个限制第一个例子:如果在const前面加了一个static的话,那显然是错误的,因为 const编译之后就已经是static静态段了? 总结   对于const和readonly这两个目前来说,也算是有所了解了,还是学了不少东西,如果看完本文还有疑问的话,你可以通过微软提供的ILDASM工具。

    24020

    java_Java

    参考链接: Java中的abstractjava Java keywords are the reserved words that are used by the Java compiler Java是Java编译器使用的保留。 这些对Java编译器具有特殊含义。 保留的可帮助我们编写代码,并帮助编译器理解代码并创建节码。    我们无法创建与保留同名的标识符(类,变量,方法)。    Java (Java Keywords)  Java has 64 reserved keywords. 7 keywords 声明 :7个 Control Flow: 15 keywords 控制流 :15个 Miscellaneous: 13 keywords 杂项 :13个  Let 这是显示这些用法的简单示例。 请注意,在java main函数中使用void来指示它不返回任何内容。

    15000

    override和final

    override派生类如果定义了一个函数与基类中虚函数的名相同但是形参列表不同,编译器将认为新定义的这个函数与基类中原有的函数是相互独立的。这时,派生类的函数没有覆盖掉基类中的版本。 如果我们使用override标记某个函数,但该函数并没有覆盖已存在的虚函数,此时编译器将报错。 class B{ virtual void f1(int) const {}; virtual void f2() {}; void f3() {};};class D :B 默认私有继承{ void f1(int) const override {};正确:f1与基类中的f1匹配 void f2(int) override {};错误:B没有形如f2(int)的函数 void f3()override ;错误:f3不是虚函数 void f4()override;错误:B没有名为f4的函数};override只能用于虚函数中,因为只有虚函数才能被覆盖final我们可以把某个函数指定为final

    4710

    前端测试题: 于定义常量的const,定义一个Object对象,再对属性的值进行修改,下列说法正确的?

    考核内容:const定义对象题发散度: ★★试题难度: ★解题思路:const声明一个只读的常量。一旦声明,常量的值就不能改变。 const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。对于简单类型的数据(数值、符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。 但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了

    54120

    synchronized和volatile的区别

    下面的事例我们演示一下volatile为什么不支持线程原子性。???我们看结果显示Thread-58和线程Thread-63输出count都是10000。这显然是不正确的。 原因就是volatile是不支持原子性也不支持同步性的。如果我们把count()方法添加synchronized,那输出结果就是线程安全的了。 ??我们看结果上述的代码就是线程安全的了。 这就是synchronized和volatile的区别。

    19320

    TypeScript

    finally for while void null super this new in extends static package implements interface continue yield const

    12230

    扫码关注云+社区

    领取腾讯云代金券