首页
学习
活动
专区
工具
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++ 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 资格或者能转换为同样的数据类型

27910

C++ const详解

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

65310
  • 【C++】const成员

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

    13110

    【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.2K10

    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常量的语法特性

    91460

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

    大家好晚上好,今天给大家分享的是,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+

    64630

    C C++ const 全面总结

    在 C / C++ 中,const 关键字用于定义不可修改的变量,这些变量在声明后不能被改变。通过使用const 关键字,可以提高代码的可读性和安全性,防止意外修改变量的值。...在C++中,使用const关键字和使用预处理指令#define来定义常量是两种不同的方法,它们具有一些关键的区别: 类型安全:const 定义的常量具有明确的类型,可以进行类型检查。...因此,在C++中,通常推荐使用const来定义常量,因为它提供了更好的类型安全、作用域控制和调试能力。然而,在某些特殊情况下,例如当需要定义宏函数或进行条件编译时,#define 仍然非常有用。...什么时候用 const 、什么时候用 define ? 使用 const:当你需要定义一个具有特定类型的不变值,并且这个值只在某个特定区域(比如一个函数或类中)有效时。...在现代 C++ 中,一般推荐使用 const,因为它更安全、代码更清晰。 总结 const 关键字在 C++ 中有多种用途,可以提高代码的安全性和可读性。

    10910

    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修饰普通变量以及指针的含义基本相同。

    57170

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

    从本章起开始从0学习C++,本章主要内容: 1)C和C++的基本区别 2)C和C++的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

    87920

    c++的const和static区别

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

    4800

    关于C++ const 的全面总结

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

    1.3K30

    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.除了重载操作符外一般不要将返回值类型定为对某个对象的

    2K10

    C++常量const建议收藏

    const在C和C++中的区别 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的值。

    30430

    【C++】const关键字

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

    47530

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

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

    86920
    领券