首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++中const声明的区别

在C++中,const关键字用于声明一个常量,即其值在初始化后无法被修改。const可以用于修饰变量、指针、引用、成员函数等。下面详细介绍const的几种声明方式及其含义。

  1. 修饰基本类型

const修饰基本类型时,表示该变量为常量,不能进行修改。例如:

代码语言:cpp
复制
const int a = 10;
a = 20; // 编译错误,不能修改常量的值
  1. 修饰指针

const可以修饰指针,分为指向常量的指针和常量指针。指向常量的指针表示该指针指向的对象不能被修改,例如:

代码语言:cpp
复制
int a = 10;
const int* p1 = &a; // 指向常量的指针
*p1 = 20; // 编译错误,不能通过指向常量的指针修改对象的值

常量指针表示该指针本身是一个常量,即指针的地址不能被修改,例如:

代码语言:cpp
复制
int a = 10;
int b = 20;
int* const p2 = &a; // 常量指针
p2 = &b; // 编译错误,不能修改常量指针的值
  1. 修饰引用

const可以修饰引用,表示该引用所引用的对象不能被修改。例如:

代码语言:cpp
复制
int a = 10;
const int& r = a; // 引用常量
r = 20; // 编译错误,不能通过引用常量修改对象的值
  1. 修饰成员函数

const可以修饰成员函数,表示该成员函数不会修改类的成员变量。例如:

代码语言:cpp
复制
class MyClass {
public:
    int a;

    MyClass(int a) : a(a) {}

    int getA() const {
        return a;
    }

    void setA(int a) {
        this->a = a;
    }
};

MyClass obj(10);
cout<< obj.getA()<< endl; // 输出10
obj.setA(20);
cout<< obj.getA()<< endl; // 输出20

在上面的例子中,getA()函数被声明为const,表示该函数不会修改类的成员变量,因此可以通过const引用或指针调用该函数。而setA()函数没有被声明为const,因此只能通过非const引用或指针调用该函数。

总之,const在C++中有多种声明方式,用于声明常量、指针、引用和成员函数等。通过使用const,可以提高代码的安全性和可维护性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

var let const声明变量区别

使用var关键字声明全局作用域变量属于window对象。 使用let关键字声明全局作用域变量不属于window对象。 使用var关键字声明变量在任何地方都可以修改。...在相同作用域或块级作用域中,不能使用let关键字来重置var关键字声明变量。 在相同作用域或块级作用域中,不能使用let关键字来重置let关键字声明变量。...let关键字在不同作用域,或不用块级作用域中是可以重新声明赋值。 在相同作用域或块级作用域中,不能使用const关键字来重置var和let关键字声明变量。...在相同作用域或块级作用域中,不能使用const关键字来重置const关键字声明变量 const 关键字在不同作用域,或不同块级作用域中是可以重新声明赋值: var关键字定义变量可以先使用后声明。...let关键字定义变量需要先声明再使用。 const关键字定义常量,声明时必须进行初始化,且初始化后不可再修改。

76210

var、let、const声明变量区别

let和var声明变量区别: 1.let所声明变量只在let命令所在代码块内有效。...ES6 明确规定,如果区块存在let和const命令,这个区块对这些命令声明变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。...,而且后定义变量会覆盖前面的变量 const声明变量 const声明一个只读常量。...一旦声明,常量值就不能改变。const声明变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。...const声明常量,也与let一样不可重复声明const实际上保证,并不是变量值不得改动,而是变量指向那个内存地址所保存数据不得改动。

84930

C++const与Cconst使用对比

大家好晚上好,今天给大家分享是,c++const使用,在我们以前学习c语言时候,我们已经接触了const用法,那么在c++const使用,又会有什么样不同呢?...超实用const用法 二、c++const用法: 既然今天主题是C++const用法,想都不用想,c++const用法和c语言里面的const用法肯定有不一样地方,下面我们来看具体用法...: 1、当碰见const声明时在符号表中放入常量。.../a.out start c=0 *p=6 三、c++const与宏区别: 1,const 常量由编译器处理; 2,编译器对 const 常量进行类型检查和作用域检查; 3,宏定义由预处理器处理...四、总结: 1,与 C 语言不通,C++ const 不是只读变量; 2,C++ const 是一个真正意义上常量; 3,C++ 编译器可能会为 const 常量非配空间; 4,C+

60130

c++constexpr_define和const定义常量区别

a3; // a4不是常量表达式,因为a3程序执行到达其所在声明处时才初始化,所以变量a4值程序运行时才知道。...说明了const声明不一定就是常量表达式! C++11新标准规定,允许将变量声明为constexpr 类型以便由编译器来验证变量值是否是常量表达式。...constexpr 指定符声明可以在编译时求得函数或变量值,声明为constexpr变量一定是一个常量,而且必须用常量表达式来进行初始化。...a4 = a3; // a4不是常量表达式,因为a3程序执行到达其所在声明处时才初始化,所以变量a4值程序运行时才知道。...; // a4不是常量表达式,因为a3程序执行到达其所在声明处时才初始化,所以变量a4值程序运行时才知道。

96040

【笔记】static, const, let 声明变量有什么区别

static, const, let声明变量有什么区别?...const不能引用一个static,但可引用另一个const。 let既可以接受【常量表达式】,也能够接受运行时求值普通表达式。 就【内存管理】来讲, const - 其自身不占用任何内存空间。...let - 保存变量值于【栈】内存【帧】,且随着函数执行结束,而被释放。 就Drop trait而言, static - 其生命周期等长于整个应用程序(即,无限生命)。...即,单实例引用可在线程间安全地共享。 const与let都没有限制。 就【具名】来讲, const与let都被允许声明一个【不具名】常量(即,常量名为_)。我是真不理解这有什么用。...就【可修改性】来讲, const门也没有 static就得话分两说了: 直接static mut声明可修改变量,会导致unsafe代码。无论读还是写static mut值都是unsafe

57710

1.C和C++区别,以及const分析(底层const顶层const)

从本章起开始从0学习C++,本章主要内容: 1)C和C++基本区别 2)C和C++const区别 ---- 1.C++和C区别 1.1 C++更强调语言实用性,所有变量都可以在需要时再定义 比如:...for(int i=0;i<100;i++); 1.2 C++不允许定义多个同名全局变量,而C却可以重复定义 1.3 C++register只是个兼容作用 1.4 C++所有标识符都必须有声明类型...再次声明 C和C++const区别 2....由于指针修改只读存储区数据,所以导致程序崩溃 3. C++const 3.1 介绍 在C++,const变量则是真正常量了,定义时会将其放入符号表....这是因为使用&c时,会从符号表取出c值,并将0存在一个新分配空间地址里,所以*p修改只是分配出来空间地址内容,而c还是常量. 3.2 const和define区别 是不是感觉C++const

81420

Dart final 和 const 区别

用final修饰变量,必须在定义时将其初始化,其值在初始化后不可改变; const用来定义常量。 它们区别在于,const比final更加严格。...下面先用简单例子说明一下区别,再通过代码理解"const所修饰是编译时常量"这句话: 基本用法 final:只能被设一次值,在声明处赋值,值和普通变量设值一样,可以是对象、字符串、数字等,用于修饰值表达式不变变量...const bar = 1000000; // 定义常量值 // bar =13; // 出现异常,const修饰变量不能调用setter方法,即:不能设值,只能在声明处设值 const...atm = 1.01325 * bar; // 值表达式变量必须是编译时常量(bar); var c = 12; // atm = 1 * c; //出错,因为c不是一个编译时常量...,即:非const修饰变量(只有const修饰变量才是编译时常量) const还可以用来声明常量值: // [] 创建一个空列表. // const [] 创建一个空不可变列表 (EIA). var

3K10

C与C++const用法上区别

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

70640

Jsvar let const 区别

一、前言 在ES6(ES2015)出现之前,JavaScript声明变量就只有通过 var 关键字,函数声明是通过 function 关键字,而在ES6之后,声明方式有 var 、 let 、 const...、 function 、 class ,本文主要讨论 var 、 let 和 const 之间区别。...五、const const 声明方式,除了具有 let 上述特点外,其还具备一个特点,即 const 定义变量,一旦定义后,就不能修改,即 const 声明为常量。...);//3 所以准确说,是 const 声明创建一个值只读引用。...六、总结 var 声明变量属于函数作用域,let 和 const 声明变量属于块级作用域; var 存在变量提升现象,而 let 和 const 没有此类现象; var 变量可以重复声明,而在同一个块级作用域

1.8K30

jsvar、let、const区别

javascript中有三种声明变量方式:var、let、const 1.var 作用域:全局或局部 var作用域可以是全局或是局部,以下分四种情况说明: (1).当var关键字声明于函数内时是局部变量...(2)当var关键字声明于函数外时是全局变量,此时不论在函数外部还是内部都可以访问到。...(3)当var关键字第一次声明变量于函数外时是全局变量,并且在函数内又使用var关键字声明了同一名字变量,那么后声明这个是局部变量只作用于函数内,对函数外第一次声明变量不影响。...(4)当var关键字第一次声明变量于函数外时是全局变量,并且在函数内直接访问赋值了,那么此变量即是声明那个变量。 var定义变量可以修改,如果不初始化会输出undefined,但不会报错。...2.let 作用域:局部(块级作用域) let是块级作用域,函数内部使用let定义后,对函数外部无影响,在同一块域内let不可重复声明 3.const 作用域:局部(块级作用域) const定义变量作为一常量

2.1K20

JSvar与let、const区别

var与let、const 一、var声明变量会挂载在window上,而let和const声明变量不会: var a = 100; console.log(a,window.a); // 100...// 1 undefined 二、var声明变量存在变量提升,let和const不存在变量提升 console.log(a); // undefined ===> a已声明还没赋值,默认得到undefined...五、暂存死区 var a = 100; if(1){ a = 10; //在当前块作用域中存在a使用let/const声明情况下,给a赋值10时,只会在当前作用域找变量a, // 而这时...,还未到声明时候,所以控制台Error:a is not defined let a = 1; } 六、const /* *   1、一旦声明必须赋值,不能使用null占位。...* *   2、声明后不能再修改 * *   3、如果声明是复合类型数据,可以修改其属性 * * */ const a = 100; const list = []; list[0] = 10;

2.3K20

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

const成员函数内可以调用其他const成员函数吗?...5、const成员函数不能调用非const成员函数 6、非const成员函数可以调用非const成员函数 我们知道c++在类成员函数还会隐式传入一个指向当前对象this指针,所以在test类,...实际print函数应该是这样void print(test * this);,这代表一个指向test对象指针this被传入到了print函数 假如现在我们用test类创建一个对象, 1 test...这就会出现问题 const test obj2(122); obj2.print(); 这时obj2对象指针就会传递给test *this 指针,而obj2地址翻译成指针类型应该是这样const...* this; 是和void print() const;this指针类型是一样,所以常量对象可以调用const成员函数。

1.1K20
领券