社区
C++ 语言
帖子详情
为什么从const char*类型向char*赋值会报错,而从const char向char赋值就没问题?
zhoufanking
2005-10-22 11:18:40
rt
...全文
2309
21
打赏
收藏
为什么从const char*类型向char*赋值会报错,而从const char向char赋值就没问题?
rt
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhouhuahai
2005-10-26
打赏
举报
回复
为什么从const char*类型向char*赋值会报错
用这个:
const_cast<char *>
就可以了. .......... ^_^
qccbcsj
2005-10-26
打赏
举报
回复
哈哈,楼上的,多谢指教。
不过C标准给出的那个说法太咬文嚼字了,先记下字面意思啦。
AntonlioX
2005-10-26
打赏
举报
回复
mark
nanhaochen
2005-10-26
打赏
举报
回复
大家真热心啊
Ninputer
2005-10-26
打赏
举报
回复
用const_cast<T>运算符可以去除const,但是可能有危险,未必能把const类型转为非const类型
K
2005-10-26
打赏
举报
回复
向下兼容
xzgyb
2005-10-26
打赏
举报
回复
应该是
char * const和char *
char const 和 char
megaboy
2005-10-24
打赏
举报
回复
另外,我以为这里使用“左值、右值”的解释说法不对,因为这里讨论的两个指针本身都是变量,并不存在“变量赋值给常量”的问题。
书上说阿,C++中“左值不能是常量”。
-----------------------------------------------
你理解错了。在赋值表达式中,“左值不能包含限定词”与“指针间的赋值,左值必须包含右值的所有限定词”是两个规则,不同的。这里的情况并不属于“左值不能包含限定词”。楼上应该好好去读一下标准。
foxspace
2005-10-23
打赏
举报
回复
那反过来赋值可以吗?
Pigwen
2005-10-23
打赏
举报
回复
回复人: yc0188(守护瓶(萍)) ( ) 信誉:99 2005-10-23 00:07:00 得分: 0
cont char *str;// 是内容不可修改, 并不是指针不可修改.
char cont *str;// 是指针不可修改, 并不是内容不可修改.
-----------------------------------------------------------------------
char const *str 和 const char *str是一样的,都是内容不可变,指针可变。
char* const str才是指针不可变,内容可变。
楼主的问题一楼说得很清楚哈。
yuchengliu
2005-10-23
打赏
举报
回复
cont char *str;// 是内容不可修改, 并不是指针不可修改.
char cont *str;// 是指针不可修改, 并不是内容不可修改.
qccbcsj
2005-10-23
打赏
举报
回复
另外,我以为这里使用“左值、右值”的解释说法不对,因为这里讨论的两个指针本身都是变量,并不存在“变量赋值给常量”的问题。
书上说阿,C++中“左值不能是常量”。
qccbcsj
2005-10-23
打赏
举报
回复
晕,修正一下:
“这是C++为了保证字符串常量不会被修改而做出的设定”中的“字符串常量”修改为“文字常量”。
发帖是就看不到,一完成就看见错误啊啊啊啊!郁闷。
qccbcsj
2005-10-23
打赏
举报
回复
我认为原因是:
C++不允许用一个变量指针(char *)指向一个文字常量(const char * 是一个字符型常量指针)。
这是C++为了保证字符串常量不会被修改而做出的设定。
反过来,C++允许常量指针指向一个变量,也就是说把一个char *赋值给 const char *类型的操作是允许的——C++保证不能通过常量指针修改它所指向的任何对象[即使是个变量]。
比如一个const类成员函数如果含有变量指针,就有可能修改该变量指针所指向的操作,这是危险的。——哈,这方面我也很生疏不多说啦。
就像林锐博士的C++高级编程说的那样,对于这方面的东西,最好熟悉“变量指针、常量指针、const”等的相关内容,Primer等C++学习书籍上都有详细的叙述。
codearts
2005-10-23
打赏
举报
回复
以*号做为分界
const在左边,表示指针指向的数据为const
const在右边,表示指针为const
fangrk
2005-10-23
打赏
举报
回复
可以把const char*看作只能使用220V电压的电器
char*看作110V--250V的电器
那么把你把110V--250V的电器接在220V上使用
但你不能把220V电器接在110V--250V电压上使用
newbiestar
2005-10-23
打赏
举报
回复
回复人: foxspace(幽谷灵狐) ( ) 信誉:100 2005-10-23 00:16:00 得分: 0
那反过来赋值可以吗?
===================================
反过来是可以的,在重载函数解析的时候从char*到const char*的转换是一个精确匹配,属于限定转换
newbiestar
2005-10-23
打赏
举报
回复
const char*到char*不存在内容复制的过程,所以这个是不允许的
而const char到char存在了必需的内容复制过程,所以这个是允许的。如果这个不允许的话,那么int ival = 1;这样的初始化就不能存在了
megaboy
2005-10-22
打赏
举报
回复
c标准规定,指针间的赋值,左值必须包含右值的所有限定词。把char*赋值给const char*,作为左值的char *并没有包含作为右值的const char *的限定词const,因此非法。
v41dugu
2005-10-22
打赏
举报
回复
呵呵 这个问题最近有很多人问了~~
加载更多回复(1)
[图解]详细说明
char
*,
const
char
*,
char
**,
const
char
**,
char
*
const
*,以及他们对应的
赋值
关系
[图解]详细说明
char
*,
const
char
*,
char
**,
const
char
**,
char
*
const
*,以及他们对应的
赋值
关系概念解释
char
*p 与
const
char
*p
char
**p,
const
char
**p 与
char
*
const
*p
赋值
问题
char
*p
赋值
给
const
char
*p
const
char
*p
赋值
给
char
*p
char
*...
关于
const
char
*和
char
*、
const
char
** 和
char
**
赋值
问题
根据ANSI C标准的
赋值
约束条件: 1. 两个操作数都是指向有限定符或无限定符的相容
类型
的指针。 2. 左边指针所指向的
类型
必须具有右边指针所指向
类型
的全部限定符。 一、
const
char
*和
char
*
const
char
*的
类型
是:“指向一个具有
const
限定符的
char
类型
的指针”。(不能修改其值)
char
*的
类型
是:“指向一个
char
类型
的指
const
char
*(字符串常量)能否
赋值
给
char
*
上面 这行代码再VS2015是能正常编译的。 而VS2017直接
报错
: 然后再看看linux平台如何,测试环境:ubuntu1604 gcc version 5.4.0 用gcc编译通过 用g++编译也能通过,不过
会
警告: 我们知道字符串常量是位于静态存储器,内存只读。所以正常使用应该如下:
const
char
*p = "hello"; 为什么
会
出现上面的不同,SO上看到一个回答: 意思是字符串常量在C中是
char
数组,在C++中是
const
char
数组,C++为了兼...
关于为什么
const
char
*不能
赋值
给
char
*
为什么
const
char
*不能
赋值
给
char
*
const
char
* 和
char
* 之间的转换
const
char
* 和
char
* 之间的转换
const
char
*是指向常量的指针,而不是指针本身为常量,可以不被初始化.该指针可以指向常量也可以指向变量,只是从该指针的角度而言,它所指向的是常量,通过该指针不能修改它所指向的数据. 1.
const
char
*是不能直接
赋值
到
char
*的,这样编译都不能通过,理由:假如可以的话,那么通过
char
*就可以修改
const
char
指向的内容了,这是不允许的.所以
char
*要另外开...
C++ 语言
64,701
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章