如何修改const类中的变量(或在const函数中修改变量)

【小点】const变量可以修改么? 1、直接对const变量修改 #include <stdio.h> int main() { const int a = 10; a = 1; printf("a=%d",a); } 编译出错了。 2、const变量通过指针修改试验 #include <stdio.h> int main(void) { const int i... 阅读详情
 有时候,我们需要在const函数中修改一些变量,比如类的共享标记、共享计数器,如下代码: class Entity { private:     int referenceCounter; public:     void ref() { referenceCounter++; } ... }; 我们可能会在很多函数中调用Entity::ref()来对这个类增加引用,因为这个函数是如此基础,导致可能有一些被const修饰的函数也可能调用这个方法,那么,我们往往需要将ref()也加上const修饰以方便调用。如下: public:     void ref() const { ... } 这时我们就会面临一个情况,如何在这个const的函数中修改值? 一种众所周知的方法是: (Entity *this)->referenceCounter++; 另外,还有一个比较罕见的用法,那就是修改referenceCounter的定义,通过mutable进行修饰: class Entity { private:     mutable int referenceCounter; public:     void ref() const { referenceCounter++; } ... }; mutable的含义在这里表示这个变量可以在const中被修改,它overwrite了const修饰。 不可否认,这是C++一个继const之后的又一恶心发明,用一个恶心解决另一个恶心。 mutable修饰的变量,不仅可以在const函数中修改,也可以在无视const类的约速,如下代码是可以运行的: const Entity e; e.reference = 1;
硬件学习笔记(器件篇)—— 磁珠与磁环 因为有这些差别,所有经常会让人们觉得他们并不是一器件,但实际上他们的原理是一样的。我们使用磁珠是为了利用损耗消耗高频能量,所以如果我们理解了磁珠是如何消耗高频能量的,我们就能理解磁珠的工作原理。 阅读详情

相关推荐

Oracle19c SYSAUX表空间爆满?手把手教你清理SM/ADVISOR和AUDSYS占用(附完整SQL)

本文详细解析了Oracle19c中SYSAUX表空间爆满的常见原因及解决方案,重点针对SM/ADVISOR和AUDSYS组件的空间占用问题提供了完整的SQL清理脚本。通过诊断查询、空间清理和预防性维护策略,帮助DBA有效管理SYSAUX表空间,确保数据库稳定运行。

weixin_28338005的博客 204

STM32 KEIL C99编程(一)使用指针修改const变量的探索

一、关于const变量 const变量常被理解为常变量,一般不可被修改。在CMSIS中,一般常用__I表示: #define __I volatile const /*!< Defines 'read only' permissions */ 实际上在keil默认的C99编译器中const修饰的变量仍然是变量,只是不允许出现在左值中。它作为一个变量,同样不能用来定义数组的长度。既然是变量,在很多情况下依然是可以被修改的。 在GCC者VC下,c

cypressxt926的博客 3567

SALOME_salome开源_CAEPreProcessor_salome_开源cae软件_salome软件官网_

CAE PreProcessorSALOME是一个开源软件,为数值模拟提供了一个通用的前后处理平台。它基于一个由可重用组件构成的开放、灵活的体系结构。SALOME是一个跨平台的解决方案。它是根据GNU LGPL许可证的条款分发的。您可以从该站点下载源代码和可执行文件。

关于修改const

改变const修饰变量的值

fuyuyf的博客 1502

修改const变量,与编译器优化问题

普通const变量在C++中为不可修改的;但是只是在编译器编译的过程中会有提示; 通过地址间接进行修改const的值会怎样? const long i1 = 5; long i2 = 10; long i3 = 20; long *i4 = &i2; i4 = i4 - 8; *i4 = 9; 这样改,编译器会报错吗? 不会。编译器编译通过,并且能正常跑。 那么,问题来了,i1的值会变成9吗?来cout一下: std::cout <&l

alegriabaile的博客 750

哈佛和冯诺依曼,从STM32const全局变量说起

从在学校到后来的实习工作,讲真,对于处理器的冯诺依曼结构和哈佛结构不大在意,印象中只知道它是数据存储器和程序存储器相关。   昨天在STM32程序中,把全局变量的定义成const属性时,发现它所处的位置是在STM32内置的FLASH而非内置的SRAM中。顿时让我觉得十分奇怪,程序不都必须在RAM中运行?即使在静态常量区不也应该放在SRAM中?   原因?这得从处理器的冯诺依曼和哈佛结构说起了。

echo_bright_的博客 9637

c++ 中const 关键字

本文介绍了C++中const关键字的常见用法。const可用于定义常量变量、限制函数参数修改、声明不修改成员变量const成员函数,以及控制指针的修改权限(指向内容指针本身)。const对象只能调用const成员函数,mutable关键字允许在const函数修改特定变量。此外,const还可用于成员变量初始化和函数返回值保护。这些用法能提高代码的安全性和可读性,是C++编程中的重要特性。

WANG__SY的博客 475

C++ const用法总结

const的用法总结,主要分为const变量中、函数中和中的用法总结。

Kallou的博客 1793

C++ 的成员变量

C++ 的成员变量

SpriCoder的博客 6657

const关键字分析

目录C语言中修饰变量C语言中修饰指针变量C语言中修饰函数的参数C语言中修饰函数的返回值C++中修饰变量C++中修饰函数的参数C++中修饰函数的返回值C++中修饰的成员函数C++中修饰的成员变量 C语言中修饰变量 在C语言中,被const修饰的是一个不能被修改变量。 C语言中修饰指针变量 #include <stdio.h> //代码1 void test1() { int n = 10; int m = 20; int *p = &n; *p = 20;//ok p =

丁丁逗的博客 166

详解c++中的const关键字

c++中const关键字可以实现将一个变量函数,限定为只读不可进行修改的功能,它的作用是很大的,const可以避免程序员在代码中意外修改某些本应保持恒定的值,并且它还可以限定指针引用,使其无法通过它们修改所指向的对象,通过const,可以增强代码的安全性和可读性,明确标识出不应被修改的部分,同时编译器会强制检查这些约束。下面再仔细讲讲,const在c++的各种应用。

z3363的博客 531

函数后加CONST的意义

使用const修饰符主要是提供给自定义const对象调用时使用的,用const修饰和缺省数据中的含义似,表示中的成员不会被改变。注意在const成员函数中不能改变中非mutable修饰的成员,也不能调用非const函数。只有成员函数后才能加const

genius52的专栏 923

函数(常成员函数)是C++特有的函数

函数const member function)是C++特有的概念,C语言中没有这样的特性。在C++中,常函数是指不修改的任何非静态成员变量的成员函数。通过在函数声明后面添加。都是常函数,因为它们承诺不修改的任何非静态成员变量。这意味着它们可以被const对象调用,而且它们不能修改对象的内部状态。关键字,可以保证该函数不会修改对象的状态。

wanghao312的博客 654

如何在 C# 中使用 const,readonly,static

平时在开发时经常会用到 const,readonly,static 关键字,可以肯定这些关键词是完全不同的概念,但有时候他们在用法上很相似以至于在场景中不知道选择哪一个,这篇文章我们就来...

dotNET跨平台 382

const关键字

1)const关键字修饰变量 - 变量不被改变 2)const修饰函数参数返回值 3)const修饰的成员函数 - 成员函数中不允许改变成员变量的值

mrluoming的专栏 492

如何修改const常量的值

    看到这个标题,你也许会说,我不懂const, 因为Const修饰的是不可变得变量,他的值是不能修改的。没错,const修改的值的确不能修改,但是也有条件,条件就是编译不能通过,const是一个编译时期常量。如果我能在绕过编译器,通过编译后,我仍然可以修改const的值。    分C/C++两种情况讨论:    一 C语言:    const long lng=10;    

4326

JavaScript中const可以改变数据吗

JavaScript中const可以修改吗?什么情况下可以修改,什么情况下不可修改呢?

zsusanj的博客 2147

如何修改c++const成员函数中的变量

如何修改c++const成员函数中的变量

qq_51274317的博客 3023

const成员函数修改成员变量的问题

class CTextBlock{ public: std::size_t length() const; private: char *pText; std::size_t textLength; bool lengthIsValid; }; std::size_t CTextBlock::length()const { if (!lengthIsValid) { textLe

小咸鱼_的博客 6911

C++中如何修改const变量

一、结论声明:不同于C语言的const变量修改问题(可以通过指针间接修改const变量的值),这里只讨论C++ 里的const。C++ const 修饰符,表示常量,即如果以后保证不会修改则声明为const,否则若要修改,那一开始为什么还要声明为const呢?根据C++标准,对于修改const变量,属于:未定义行为(指行为不可预测的计算机代码),这样一来此行为取决于各种编译器的具体实现(即不同编译...

jyh的博客 1万+
上一篇: 合并等价标签算法.
下一篇: VC++6.0中内存泄漏检测 - 对MFC检测方法的移植
向量Vector
博客等级 码龄18年 113粉丝 129原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值