首页 > 其他分享 >关键字:const

关键字:const

时间:2024-10-04 20:49:12浏览次数:10  
标签:const 变量 int 关键字 编译器 报错 修饰

const关键字

const关键字也许应该被替换成readonly(只读);

1.1const修饰变量

const修饰的变量,不可直接被修改——但是可以间接修改,使用指针

那么const修饰变量的意义在哪里?(const修饰变量的本意是不让他修改,可是却可以绕开变量,使用指针修改,那么意义何在?)

答:

1.const修饰变量,这个关键字是给编译器看的,让我们的编译器在编译代码时对用const修饰的变量进行语法检查,凡是在后续代码当中,直接对有const修饰的变量进行修改行为时,编译器会直接报错;是程序员告诉编译器,这个变量不想在后续的代码被自己或被别人改掉;当有人直接更改时,编译器会报错;若不加const,当有人修改变量时,可能会造成代码的逻辑错误;

2.告诉其他程序员(正在改你的代码,或者阅读你的代码),这个变量后边不要更改,也属于一种自描述

const int a=10;           //可以放在类型之前,也可以类型之后,二者等价的;
int const a=10;           //建议放在类型之前                                     
a=20;                           //不可直接修改,会报错

int* p=(int*)&a;           //强转一下类型
*p =20;                     //使用地址来改变a的值;

const修饰的变量,不能作为数组定义的一部分,C标准库不可以;但是gcc标准可以

const int n=100;

int arr[n];        //会报错;数组空间开辟的时候,元素个数(中括号里的内容必须是真常量;                          //编译器不会认为n是真常量)

1.2const修饰数组

const 修饰数组,代表数组不可被修改

const int arr[]={0,1,2,3};        //只读数组;

arr[0]=0;                                  //会报错

arr[1]=0;

1.3const修饰指针

用户必须明确,const修饰的数据不能通过哪一方面来改变;

int a=10;

const int *p=&a;                //这两种写法一样;

int const *p=&a;                //const修饰*p,不能通过*p来更改a的数据;

int * const p=&a;              //const 修饰p;p的指向不能改,只能指向a;

const int * const p;        //不能通过*p修改a的值;不能更改p的指向,只能指向a

1.4const修饰函数的参数 

const修饰函数的参数,不希望这个参数在函数体内被改变使用

void func(const int i)        //i不可以直接被改变

 1.5const修饰函数的返回值

const修饰函数返回值,返回值不可被改变

const int* test(){
    static int g_val=100;
    return &g_val
}
int main(){
    const int *p=test();
    *p=200;    //会报错
}

const 修饰函数返回值,如果用户不想函数返回值被别人通过指针来更改函数内部的一个变量,可以对返回值做const修饰,在外部接收的时候,采用同样的编码规则去接收;这样在后续的使用这个变量的时候,就无法做修改了;

标签:const,变量,int,关键字,编译器,报错,修饰
From: https://blog.csdn.net/qincjun/article/details/142706957

相关文章

  • const和readonly修饰的成员,静态构造函数以及对于变量的访问{get;set}
    第一,const修饰的数据类型定义:按照publicconstinttest=20;的格式进行声明,const修饰的数据类型叫做常量。注意:1访问时只能通过类名加变量名访问。      2必须在声明的时候就赋值。      3常量是不可修改的值。代码如下:usingSystem.Collection......
  • Verifying that your constructor params satisfy all assert conditions 部署测试合
     运行trufflemigrate报错***DeploymentFailed***"TestT**"hitaninvalidopcodewhiledeploying.Try:*Verifyingthatyourconstructorparamssatisfyallassertconditions.*Verifyingyourconstructorcodedoesn'taccessanarr......
  • 程序运行异常: Undefined constant"PAGE
    在使用PbootCMS时,如果遇到“Undefinedconstant'PAGE'”的错误,尤其是在后台自定义表单编辑字段时,这通常是由于PHP版本不兼容导致的问题。具体来说,某些常量或函数可能在较高版本的PHP中不再支持或行为有所变化。解决方法降低PHP版本:将PHP版本从8.0降到7.3。详细步骤检......
  • [JavaScript] this 关键字
    全局作用域在浏览器中,如果在全局作用域下使用this,它将指向window对象;在Node.js环境中,则指向global对象。方法调用当一个函数作为对象的方法被调用时,this会指向该对象。constobj={name:"Alice",greet:function(){console.log(`Hello,${this.name}`)......
  • C++(关键字)
    5.作用域限定符::5.1名字空间(掌握)名字空间是一种代码的层级划分。#include<iostream>usingnamespacestd;//C++课程中几乎所有的类型(不包括基本数据类型)都在std中inta=1;//新建一个名字空间namespacemy_space{inta=3;strings="哈哈......
  • C++ 语言特性04 - decltype关键字
    一:概述        decltype是C++11引入的一个关键字,用于查询表达式的类型,而不对表达式进行求值。它的主要作用是在编译时确定变量或表达式的类型,非常适合在模板编程和泛型编程中使用。二:使用场景    1.获取变量的类型intx=10;decltype(x)y=20;//......
  • Cannon-es.js之Distance Constrait模拟布料
    本文目录前言最终效果1、Particle2、前置代码准备2.1代码2.2效果3、使用距离约束模拟布料3.1代码3.2效果前言在现代Web开发中,实现逼真的物理效果对于提升用户体验至关重要。Cannon-es.js,作为Cannon.js的ES6模块版本,凭借其轻量级、高性能和易于集成的特点,在Web......
  • volatile关键字
    volatile是C和C++编程语言中的一个关键字,用于修饰变量,指示编译器该变量可能在程序的某个地方被外部因素改变。它常用于多线程编程、嵌入式系统和与硬件交互的场景用途防止优化:当变量被声明为volatile,编译器不会对该变量进行优化。这意味着每次访问该变量时,编译器都会从......
  • this关键字
    this关键字是面向对象编程(如Java、C++等)中的一个重要概念,用于引用当前对象的实例。它在类的内部使用,可以帮助开发者更清晰地访问类的成员变量、方法以及构造方法。下面将详细介绍this关键字的使用场景和示例。this引用:当你在对象的方法内部使用this时,this是一个局部......
  • C++ const_cast 和重载
    在4.11.3节(第145页)中我们说过,const_cast在重载函数的情景中最有用。举个例子,回忆6.3.2节(第201页)的shorterstring函数://比较两个string对象的长度,返回较短的那个引用conststring&shorterString(conststring&sl,conststring&s2){returnsl.size()<=s2.size()?......