关于const_cast的相关问题

问题描述

关于const_cast的相关问题
const char *pc;
char *p =const_cast<char *> (pc);     //正确:但是通过p写值是未定义的行为

这里很奇怪,既然改变运算对象的底层const,不就是为了给它写值么,为什么反而是未定义的行为,感觉好多余。

解决方案

pc 是 const,但 p 不是 const。
这就是 C 语言指针使用的问题:将指针指向一个 const 的对象,能修改数据,这时编译器不会认为是错误的。

解决方案二:

const char *pc = ""Hello;
char *p = const_cast(pc);


如果楼主的代码是说这样的话,下面可以帮助你理解为什么?
解释:你理解了const_cast<>强制类型转换的机制但是没有理解char *pc 与char pc[]的区别。
const char *pc;这句话将pc指向的是一个字符串常量,并且指针的类型也是const char类型;
经过char *p = const_cast(pc);后,char *p指向的内容同样也是字符串常量“Hello”,常量是不能更改的。
而如果改成下面的就行了:
const char pc[] = "Hello";
char *p = const_cast(pc);
p[0] = 'J';


时间: 2024-11-17 09:16:25

关于const_cast的相关问题的相关文章

拷贝构造,深度拷贝,关于delete和default相关的操作,explicit,类赋初值,构造函数和析构函数,成员函数和内联函数,关于内存存储,默认参数,静态函数和普通函数,const函数,友元

 1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.第二种初始化的方式是直接在构造方法里面实现初始化. 案例如下: #include<iostream> //如果声明已经定义,边不会生成 class classA { private: int a; int b; public: //拷贝构造的规则,有两种方式实现初始化 //1.一个是通过在后面:a(x),b(y)的方式实现初始化 //2.第二种初始化的方式是直

详解C++中const_cast与reinterpret_cast运算符的用法_C 语言

const_cast 运算符从类中移除 const.volatile 和 __unaligned 特性. 语法 const_cast < type-id > ( expression ) 备注 指向任何对象类型的指针或指向数据成员的指针可显式转换为完全相同的类型(const.volatile 和 __unaligned 限定符除外).对于指针和引用,结果将引用原始对象.对于指向数据成员的指针,结果将引用与指向数据成员的原始(未强制转换)的指针相同的成员.根据引用对象的类型,通过生成的指针.引用

static_cast,dynamic_cast,reinterpret_cast和const_cast的区别详解_C 语言

C-style cast举例: int i; double d; i = (int) d; 上面的代码就是本来为double类型的d,通过(int)d将其转换成整形值,并将该值赋给整形变量i (注意d本身的值并没有发生改变).这就是典型的c-style类型转换. 下面是一个简单的程序: 复制代码 代码如下: #include <iostream>using namespace std; int main(void){         int i;         double d = 11.2

计算机网络原理相关面试问题

1.简单介绍OSI的七层网络模型,画图描绘,描述主要几层的各自作用.OSI(Open System Interconnect,开放系统互连)七层网络模型. TCP/IP四层模型和OSI七层模型 表1-1是 TCP/IP四层模型和OSI七层模型对应表.我们把OSI七层网络模型和Linux TCP/IP四层概念模型对应,然后将各种网络协议归类. 表1-1  TCP/IP四层模型和OSI七层模型对应表 OSI七层网络模型 Linux TCP/IP四层概念模型 对应网络协议 应用层(Applicatio

使用Putty的Telnet及SSH功能进行相关工作

说实话,我不习惯命令行的操作.但是有些工作必须要使用命令行才能完成操作.比如公司的网络设备,都是通过命令行. 唉,没有办法只能去适应了.先来说说Telnet吧.以前我认为Telnet因为是明文的方式进行传输,在实际工作中使用的比较少.但是目前看来我错了,而且错的很离谱呢. 公司很多的管理都是通过Telnet进行的. 除此之外,还有SSH.这个我还是知道的.相对于Telnet来说,SSH还是很安全的. 平时使用Telnet时,要么是使用本机自带的Telnet客户端.操作起来还行,但是前提是本机一定

数据库相关中间件收录集

数据库中间件 这里主要介绍互联网行业内有关数据库的相关中间件.数据库相关平台主要解决以下三个方面的问题: 为海量前台数据提供高性能.大容量.高可用性的访问 为数据变更的消费提供准实时的保障 高效的异地数据同步 应用层通过分表分库中间件访问数据库,包括读操作(Select)和写操作(update, insert和delete等,DDL, DCL).写操作会在数据库上产生变更记录,MySQL的变更记录叫binlog, Oracle的称之为redolog, 增量数据订阅与消费中间件解析这些变更,并以统

最通俗易懂的解读比特币相关原理

周末花时间看了一些比特币原理相关的资料,虽然不敢说把每个细节都完全搞懂了,不过整体思路和关键部分的主要原理还是比较明白.写一篇文章分享给大家.这篇文章的定位会比较科普,尽量用类比的方法将比特币的基本原理讲出来.这篇文章不会涉及算法和协议中比较细节的部分,打算后面会再写一篇程序员视角下的比特币原理,那里会从技术人员的视角对比特币系统中较为关键的数据结构.算法和协议进行一些讲解. 在这篇文章中我会给出一个虚拟的村庄叫"比特村",整个文章会以讲故事的方式,逐步告诉大家比特币提出的动机.解决了

WPF Graphics 相关类图

WPF 中 Graphics 相关的类有时候看起来比较晕,有些类的命名也比较相近,所以画出下面几个图,帮助记忆: 1. Geometry 几何图形   2. PathGeometry 路径几何图形   3. Shape   4. Drawing & Visual

文本框-匹配相关内容,就像邮箱一样

问题描述 匹配相关内容,就像邮箱一样 怎么实现在文本框里输入字符串并出现相关的字符串,并且点击出现的内容并在出入框中显示 解决方案 做一个表格,记录相关的内容,然后在输入的文本框里写代码,内容变化时过滤表格来实现你说的功能,用户选择表格中某一行时,把值赋到文本框里 解决方案二: 网页上的一种局部刷新东西搞的?匹配字符完后返回给div?纯属路过 解决方案三: 网页上的一种局部刷新东西搞的 ajax