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

C/C++改变了const的值

在 C/C++ 中,const 关键字用于声明一个常量,即其值在初始化后无法更改。然而,尽管 const 变量的值不能更改,但是通过指针或引用,我们仍然可以改变指向的 const 变量的值。

以下是一个示例:

代码语言:cpp
复制
#include<iostream>

int main() {
    const int a = 10;
    int* p = const_cast<int*>(&a); // 使用 const_cast 移除 const 属性
    *p = 20; // 改变 a 的值
    std::cout << "a = " << a << std::endl; // 输出 20
    return 0;
}

在这个示例中,我们使用 const_cast 来移除 const 变量 aconst 属性,然后通过指针 p 改变了 a 的值。需要注意的是,这种做法是不安全的,因为它破坏了 const 的保证,可能导致未定义的行为。因此,在实际编程中,应该避免这种做法。

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

相关·内容

C++const成员

前言 在之前已经已经分享过了关于 【C++】类和对象之常引用与运算符重载,这次分享有关const内容,话不多说,正文开始。...2. const成员 将const修饰“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含this指针,表明在该成员函数中不能对类任何成员进行修改。...总之: 成员函数,如果是一个对成员变量只进行读访问函数,建议加const,这样const对象和非const对象都能使用。...这个才是权限放大,r改变影响i。 p2改变会影响p1,也就是i。 权限放大:指针和引用赋值才存在权限放大。 来看看下面的几个问题: const对象可以调用非const成员函数吗?...不行,权限放大了 非const成员函数内可以调用其它const成员函数吗? 可以,这里是权限缩小 3.

10910

C++ const详解

常量在C++中经常用到,用关键字const表示,它是常数变量,也就是说,它仍然是变量,而不是常数。什么区别呢?...指针常量和常量指针   这应该是C++面试和笔试中经常考到一个知识点。...,*p都在const后面,所以*p是个常量,直接对*p赋值操作肯定是错误;而指针常量,只有p在const后面,所以p是常量,指针指向地址是不能变,但指向地址里面的内容是可以变。...函数参数中常量 如果函数参数中有常量,那么在函数中,该参数是不能被修改 int func(const int i){ i++; // ERROR } 函数返回为常量 int f1()...; // OK } 所以,对于const变量,我们可以要记住一个核心一点是,const后面的变量是不能当左

63010

C++ 顶层 const

主力博客:半亩方塘 本文主要參考来源来自于:C++ Primer 中文版(第 5 版) 第 57 面至第 58 面 1...., 顶层 const 表示是 指针本身是一个常量, 底层 const 表示是 指针所指对象是一个常量,更普通情况下, 顶层 const 能够表示随意对象是一个常量,这对于算术类型、类、指针等不论什么数据类型都是成立...const int ci = 42; // 不能改变 ci ,这是一个顶层 consti = ci; // 正确:ci 是一个顶层 const,对此操作无影响const int *p2 =...&ci; // 同意改变 p2 ,这是一个底层 constconst int *const p3 = p2; // 靠右 const 是顶层 const ,靠左是底层 constp2 = p3...; // 正确:p2 和 p3 指向对象类型同样,p3 顶层 const 部分不影响 (2)底层 const 限制不能忽略,  要求拷出和拷入对象有同样底层 const 资格或者能转换为同样数据类型

26310

C++const

\n"); return 0; } 编译结果 gcc test.c –> c = 5 g++ test.cpp –> c = 0 C++const C++C基础上对const...对const 常量使用& 操作符 注意: C++编译器虽然可能为const常量分配空间,但不会使用其存储空间 ?...图1解释 test.cpp 中c = 0原因 区别 C语言中const 变量 C语言中const 变量是只读变量,会分配存储空间 C++const 常量 可能分配存储空间 ...当const 常量为全局,并且需要在其它文件中使用 当使用&操作符对const常量取地址 C++const 常量类似于宏定义 const int c = 5; ≈ #define c 5 C...不是只读变量 C++const是一个真正意义上常量 C++编译器可能会为const常量分配空间 C++完全兼容C语言中const常量语法特性

88960

C++const对象和const成员

//const const CTime time4(10); CTime const time5; 如果你用const对象引用了这个类中const成员函数,就会报错: 错误 1 error C2662...const数据成员不能被修改。 初始化时比较特殊,只能通过初始化列表初始化。不能在构造函数里赋值。...2.初始化列表 初始化列表: 除了在构造函数中对数据成员进行初始化,C++还提供另外一种方法来对数据成员进行初始化 初始化列表并不是在构造函数内进行初始化 构造函数初始化列表以一个冒号开始,...3.const成员函数 const成员函数只能被const对象引用。const成员函数内可以引用const数据成员,也可以引用非const数据成员,但不能修改非const数据成员。...有些时候,我们想要让const函数具有修改某个成员数据能力。 比如一些内部状态量,对外部用户无所谓,但是对整个对象运行却大有用处,如支持缓存技术。

1.1K10

C++constCconst使用对比

大家好晚上好,今天给大家分享是,c++const使用,在我们以前学习c语言时候,我们已经接触了const用法,那么在c++中,const使用,又会有什么样不同呢?...超实用const用法 二、c++const用法: 既然今天主题是C++const用法,想都不用想,c++const用法和c语言里面的const用法肯定有不一样地方,下面我们来看具体用法...,这张表是编译器内部数据结构),我们还是拿刚才那个示例来分析: 我们来分析一下,在c语言里面指针p初始化时候,指向了c,然后在对指针p取值操作,也就是说,改变了这时候所p指向那个地址(&c)处内存里面的内容...,原来是0,现在被改成了6;然而在我们c++编译环境中,就不是按照这样来想了,如上面的示意图,可以看到,在c++编译过程中会有一个符号表生成,那么当操作指针p时候,由于c暂时被放到了符号表中了...四、总结: 1,与 C 语言不通,C++ const 不是只读变量; 2,C++ const 是一个真正意义上常量; 3,C++ 编译器可能会为 const 常量非配空间; 4,C+

61230

C++const小结

如下面四种写法中: A. const TYPE*pContent; B. TYPE const *pContent; C....TYPE * const pContent; D. const TYPE* const pContent; A、B都表示pContent所指向内容为只读,而C表示pContent本身是只读,D表示指针本身和所指向内容都是只读...其中C写法等价于const (TYPE * )pContent; 这里说明下const 位于*左侧指针指向为常量指的是指针指向变量不能通过该指针改变,但该变量是可以通过其他方式改变。...,它表示函数体中不能修改参数(包括参数本身或者参数其中包含)。...4、 const 修饰函数返回 const修饰函数返回其实用并不是很多,它含义和const修饰普通变量以及指针含义基本相同。

54070

关于C++ const 全面总结

大家好,又见面了,我是全栈君 C++const关键字使用方法很灵活,而使用const将大大改善程序健壮性,本人依据各方面查到资料进行总结例如以下,期望对朋友们有所帮助。...ConstC++中经常使用类型修饰符,常类型是指使用类型修饰符const说明类型,常类型变量或对象是不能被更新。 一、Const作用 例如以下表所看到: No....这种一个const引用传递和最普通函数按传递效果是一模一样,他禁止对引用对象一切改动,唯一不同是按传递会先建立一个类对象副本, 然后传递过去,而它直接传递地址,所以这种传递比按传递更有效...(2)const 修饰函数返回 const修饰函数返回其有用并非非常多,它含义和const修饰普通变量以及指针含义基本同样。...const应该使用引用或指针,而不是一般对象实例,原因同上; · const在成员函数中三种使用方法(參数、返回、函数)要非常好使用; · 不要轻易将函数返回类型定为const; · 除了重载操作符外一般不要将返回类型定为对某个对象

55630

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

从本章起开始从0学习C++,本章主要内容: 1)CC++基本区别 2)CC++const区别 ---- 1.C++和C区别 1.1 C++更强调语言实用性,所有变量都可以在需要时再定义 比如:...比如,在C中: f(): 表示默认返回是int,可以接受任意个int型参数函数 在C++中: int f() int f(void)表示都一样,没有参数,返回为int型函数 int f(i)...C++const区别 2....由于指针修改只读存储区数据,所以导致程序崩溃 3. C++const 3.1 介绍 在C++中,const变量则是真正常量了,定义时会将其放入符号表中....这是因为使用&c时,会从符号表中取出c,并将0存在一个新分配空间地址里,所以*p修改只是分配出来空间地址内容,而c还是常量. 3.2 const和define区别 是不是感觉C++const

82320

C++const关键字

C++const关键字 0x1 常量 C++定义常量有两种方式 #define 宏常量:#define 常量名 常量值 通常在文件上方定义,表示一个常量 宏常量不可以修改 // 宏常量 #define...:指针指向可以修改,但是指针指向不可以修改。...0x22 指针常量 指针常量:指针指向不可以修改,但是指针指向可以修改。 0x23 const既修饰指针又修饰常量 特点:指针指向不可以修改,指针指向也不可以修改。...(Type* const pointer;),指针指向不可修改,但是指针指向可以修改 // 如果想让指针指向也不可以修改,需要声明常函数,即在成员函数后面加上const void...,修饰是this指针,让this指针指向也不可以修改 * const Person * const this;指针指向,以及指针指向都不可以修改 */

43930

C++ const各种用法总结

// ok: const_cast是C++中标准强制转换,C语言使用:double *ptr = (double*)&dVal; 2.const 指针(指针本身为常量) 声明或定义格式如下(定义时必须初始化...:const int func1(); // 此处返回int 类型const,意思指返回原函数里变量初值不能被修改,但是函数按返回这个变量被制成副本,能不能被修改就没有了意义,它可以被赋给任何...4.修饰类成员函数返回 const A operator+(const A &) const; // 前一个const 用来修饰重载函数operator+返回,可防止返回作为左进行赋值操作。...例如: A a; A b; A c; a + b = c; // errro: 如果在没有const 修饰返回情况下,编译器不会报错。...,而不是一般对象实例,原因同上; 4.const在成员函数中三种用法(参数、返回、函数)要很好使用; 5.不要轻易将函数返回类型定为const; 6.除了重载操作符外一般不要将返回类型定为对某个对象

1.9K10

C++常量const建议收藏

constCC++区别 const int buffsize = 10; char buff[buffsize];   上面的代码在C++中可以,但在C中不行,因为buffsize占用存储某个地方...,所以C编译器不指定它在编译时 const int buffsize;   上面的代码在C中可以,因为在C中默认const为外部链接,C++默认const为内部链接,所以再C++中要写成extern...const int buffsize; 类里const和enum   在一个类里,const恢复它在C一部分意思,它在每个类对象里分配存储并代表一个,这个一旦被初始化以后就不能改变。...在一个类里使用const意思是“在这个对象寿命周期内,这是一个常量”。然而,对这个常量来讲,每个不同对象可以含一个不同。...因为const必须在建立它地方被初始化,所有在构造函数主体里,const必须已经被初始化,否则就只有等待,直到在构造函数主体以后给它初始化,这样无法防止在构造函数主体不同地方改变const

28830

C++:22 再议const作用(上)

我在C++:18篇里说过const用法,这里我有必要再提升进阶下const理解。 因为你可能只知道他是怎么用,但是他为什么这样用,其他用法呢? 首先回顾下const有什么主要作用?...然而,其在编译时不能被使用,因为编译器在编译时不需要知道存储内容。自然,作为数组大小就不行了。 在函数中声明形参,在函数被调用时会得到实参。但是如果在类中呢?...“=”左边,但在类中仍可以用一个指针来修改其。)...A、作为非静态类成员时; B、用于集合时; C、被取地址时; D、在main函数体内部通过函数来获得时; E、const class或struct有用户定义构造函数、析构函数或基类时;。...*pi=5;//此处改变了test

83520

CC++const用法上区别

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

71440
领券