首页
学习
活动
专区
圈层
工具
发布

C++中const与C中的const使用对比

大家好晚上好,今天给大家分享的是,c++中的const的使用,在我们以前学习c语言的时候,我们已经接触了const的用法,那么在c++中,const的使用,又会有什么样的不同呢?...超实用的const用法 二、c++中的const用法: 既然今天主题是C++中的const用法,想都不用想,c++中的const的用法和c语言里面的const用法肯定有不一样的地方,下面我们来看具体的用法...2、编译过程中若发现使用常量则直接以符号表中的值替换。...3、编译过程中若发现下面情况则给对应的常量分配存储空间 ——对const常量使用了extern ——对const常量使用&操作符 注意:c++编译器虽然可能为const常量分配空间...四、总结: 1,与 C 语言不通,C++ 中的 const 不是只读变量; 2,C++ 中的 const 是一个真正意义上的常量; 3,C++ 编译器可能会为 const 常量非配空间; 4,C+

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

    C++中const小结

    1、const修饰普通变量(非指针变量) const修饰变量,一般有两种写法: const TYPE value; TYPE const value; 对于一个非指针的类型TYPE,这两种写法在本质上是一样的...2、const修饰指针变量 通用的准则: 在没有括号的情况下: 如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量; 如果const位于*的右侧,const就是修饰指针本身...,它表示函数体中不能修改参数的值(包括参数本身的值或者参数其中包含的值)。...5、const修饰成员函数 const修饰类的成员函数,则该成员函数不能修改类中任何非const成员函数。一般写在函数的最后来修饰。...} 对于const类对象/指针/引用,只能调用类的const成员函数,因此,const修饰成员函数的最重要作用就是限制对于const对象的使用。

    77570

    C++中const和非const对象分别调用const和非const成员函数

    5、const成员函数不能调用非const成员函数 6、非const成员函数可以调用非const成员函数 我们知道c++在类的成员函数中还会隐式传入一个指向当前对象的this指针,所以在test类中,...实际的print函数应该是这样的void print(test * this);,这代表一个指向test对象的指针this被传入到了print函数中 假如现在我们用test类创建一个对象, 1 test...test* this,即这时会出现类型不匹配的错误,在visual studio 中会出现类似于下面的错误: 4 所以通过上面的说明,我们知道了为什么const 对象不能调用非const成员函数。...* this; 是和void print() const;中this指针的类型是一样的,所以常量对象可以调用const成员函数。...} };    void DrawRect(const UIRect& rect) { rect.GetWidth(); } /只有函数右边带了const,才能被const对象使用,

    2.1K20

    C++中Const常量机制分析

    那么在实际使用中会存在如下疑问: 1,const修饰的变量是否真的不可修改? 2,如果被修改,会出现什么问题? 3,C和C++中实现机制一样吗?...其对应的Ndx下标为14,表明该变量存储在msgq文件中的下标为14的段。 执行命令 readelf -S msgq 可见,对变量地址的值进行修改后,var使用的值也变化,为最新的值。...3,C和C++中实现机制一样吗? 3.1不同点: 对于局部const变量,C++在变量具体使用地方通过常量替换实现。C语言中表示只读的变量。 3.2 相同点: 都不能对只读数据段的常量进行修改。...5.1 在.h中声明const变量 在头文件中extern const int var;//声明 在cpp文件中只能定义一次,否则会出现重定义。 因为这种情况生成的.o文件符号表存在var。...5.2在.h中定义const变量 在头文件中定义const变量 const int var =10; 在多个cpp文件中引用该文件。并把cpp对应生成的.o文件链接为可执行程序。

    2.7K151

    C与C++在const用法上的区别

    首先,C和C++在大体结构上不同,却在语法上相同。  所以在使用的时候,我们会时常遇到一些莫名其妙的问题,觉得语法上是正确的,但是编译的时候却出现一个红色的 error!...即便你用这个const_cast《》:强制去掉const属性,但是*p=3,这条语句 ,p指向的地址的值任然没有改变!...10 //可以使用强制去掉const 属性 11 int *p = const_cast(&var); 12 *p = 3; 13 std::cout...我们可以看到,var的值,没有改变!  原因是C++是强类型语言,C++的数据的类型更加严格与苛刻 !      ...当然对于C++为何会出现指针的值为*p=3而var=10这样的情况,其实,*P所指的常量地址真实的内存已经修改了,但是编译器并没有从内存地址中取值,而是直接从寄存器中取的值,所以var=10依旧表面上依旧没有发生什么改变

    1K40

    再论C++中的const和引用

    (赋值、取地址等)都会传递到代表的变量上 const引用使其代表的变量具有只读属性 引用必须在定义时初始化,之后无法代表其它变量 (3)从使用c++语言的角度来看: 引用与指针没有任何的关系 引用是变量的新名字...,操作引用就是操作对应的变量 (4)从c++编译器的角度来看: 为了支持新概念"引用"必须要一个有效的解决方案 在编译器内部,使用指针常量来实现"引用" 因此"引用"在定义时必须初始化 (5)在工程项目开发中...: 当进行c++编程时,直接站在使用的角度来看待引用,与指针毫无关系,引用就是变量的别名 当对C++代码进行调试分析时,一些特殊情况,可以考虑站在C++编译器的角度来看待引用 代码实践: 版本一: #include...;error: declaration of ‘array’ as array of references;C++ 天生要支持 C 语言,C 语言中数组中的每个元素在内存中是顺序存放的,地址是递增的,所以在...C++ 中也要兼容这个特性,而在 C++ 中唯有引用数组破快了这个特性,所以说 C++ 中不支持引用数组;&array[1] - &array[0] !

    73110

    在Vue3中使用Vuex时,如何在组件中映射state和getters?

    在 Vue3 中使用 Vuex 时,由于 Composition API 的引入,映射 ​​state​​​ 和 ​​getters​​ 的方式与 Vue2 的 Options API 有所不同。...基础方式:手动映射(推荐)在 Vue3 的 ​​​​ 中,通过 ​​useStore​​ 获取 store 实例,再结合 ​​computed​​ 手动映射 ​​state​​...getters) { res[key] = computed(() => store.getters[getters[key]]) } return res}在组件中使用:在 Options API 中使用(兼容方式)如果在 Vue3 中仍使用 Options API,可直接沿用 Vue2 的映射方式:import { mapState, mapGetters...命名空间模块: 若使用带命名空间的模块,需在映射时指定模块名:// 手动映射命名空间模块const moduleCount = computed(() => store.state.moduleName.count

    35910

    C++中的const成员变量和成员函数

    在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量和成员函数。...初始化 const 成员变量只有一种方法,就是通过构造函数的初始化列表,这点在前面已经讲到了,请猛击《C++初始化列表》回顾。...const成员函数(常成员函数) const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值,这种措施主要还是为了保护数据而设置的。const 成员函数也称为常成员函数。...常成员函数需要在声明和定义的时候在函数头部的结尾加上 const 关键字,请看下面的例子: class Student{ public: Student(char *name...char *getname() const和char *getname()是两个不同的函数原型,如果只在一个地方加 const 会导致声明和定义处的函数原型冲突。

    2K30

    c++中的const和volatile知识自我总结

    学习了下c++中的const关键字,总结如下。 1、const限制一个变量不能修改其内容,如果强行修改的话,如下面代码这样子,编译就会报错,“表达式必须是可修改的左值”。...笔者看了一些资料,【应该是】因为编译器对于const类型的变量都不会二次读取,只会在最开始的时候从内存中读取一次,之后存储在常量表中,之后需要用到就从常量表中取得。...const int *p1; int const *p2; 这两种都是说指针是个const int类型的指针,只不过const的位置比较飘忽,可以在int前面,也可以在int后面。...,大家可以参考一下这一篇https://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777432.html 总的来说,volatile可以确保每次使用变量的时候...一般在多任务环境下会用到这个关键字。 volatile的指针和const一样,分两种,见以下代码。

    79930

    c++ const放置的位置

    标准中int const a 与 const int a 是完全等价的。正因为如此,会有很多各种不同的风格,同样的还有“*是跟类型还是变量?”,比如char* p与 char *p,它们是等价的。...是采用const T& t还是 T const& t呢 是采用int* a 还是int *a呢 我在看《C++ Templates中文版》时,它里面特别提到要使用 int const 这种定义,函数参数定义也是这个写的...在c++中为了避免疑惑,虽然const int* p与int const* p等价,但为了防止与int * const p太过相似,我觉得还是采用const int* p这种比较适合(语义上int const...在 p之前,说明它是一个(常量的)指针,其值是不能变化的 最近在看《C++编程思想》里面单独有一章写const,刚看一点就联想起之前看的《C++ Template中文》后有些困惑。...里面提到C 与 C++在const的处理上还是有区别的,这里我还没完全理解透彻,等完全搞明显了可能会再写一篇文章。

    2.2K10

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

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

    1K50

    Dart 中final和const的使用详解 原

    1.基本使用 如果变量的值不发生变化,那么可以使用 final 或 const 修饰, ----final:只能被设一次值,在声明处赋值,值和普通变量的设值一样,可以是对象、字符串、数字等,用于修饰值的表达式不变的变量...; final name = 'Bob'; // name = 'job'; //运行出错,因为final修饰的变量不能调用其setter方法,即:不能设值 ----const:只能被设一次值,在声明处赋值...atm = 1.01325 * bar; // 值的表达式中的变量必须是编译时常量(bar); var c = 12; // atm = 1 * c; //出错,因为c不是一个编译时常量...,即:非const修饰的变量(只有const修饰的变量才是编译时常量) ----const还可以用来声明常量值: // [] 创建一个空列表. // const [] 创建一个空的不可变列表 (EIA)...未处理的异常. // baz = []; // 未处理的异常. 2.高级使用 ----当为final修饰的值赋一个包含成员变量或方法的对象时:      --------1.

    1.3K10

    JavaScript中,var、let和const使用

    虽然它们乍一看似乎可以互换使用,但理解它们之间的细微差别对于编写高效和可维护的代码至关重要。在这篇博客文章中,我们将深入探讨JavaScript中var、let和const之间的区别。...这可能导致意外行为,特别是在循环或嵌套函数中。...如今,不推荐使用var,以下是一些你应该使用let和const的原因:var具有函数作用域,这意味着用var声明的变量在整个函数中都是可访问的,即使在函数内的嵌套块(如if语句或循环)中也是如此。...在循环(如for或while)中,你经常需要一个变量来跟踪当前迭代。let确保这个计数器变量只在循环块内可访问,防止与代码中的其他变量发生冲突。...你仍然可以使用方法修改它们的内容。对于真正的不变性,考虑使用像immer这样的库。默认情况下,对于不需要重新分配的变量使用const可以提高代码清晰度并明确你的意图。它还促进了更一致的编码风格。

    1.1K00

    c++的const和static区别

    const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。     static表示的是静态的。...一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中。       在C++中,static静态成员变量不能在类的内部初始化。...      在C++中,const成员变量也不能在类定义处初始化,只能通过构造函数初始化列表进行,并且必须有构造函数。  ...const数据成员 只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。...所以不能在类的声明中初始化const数据成员,因为类的对象没被创建时,编译器不知道const数据成员的值是什么。       const数据成员的初始化只能在类的构造函数的初始化列表中进行。

    29200
    领券