您好、欢迎来到现金彩票网!
当前位置:2019欢乐棋牌 > 字面值 >

C++里的基础类型字面值都底是const的还是非const得?请看看问题

发布时间:2019-07-27 04:39 来源:未知 编辑:admin

  C++里的基础类型字面值都底是const的还是非const得?请看看问题提补充

  C++里的基础类型字面值都底是const的还是非const得?请看看问题提补充

  如:12345是constint还是int?345.5是constdouble还是double?某天看了一篇文章,文章下面的评论提到这个问题!本人很是困惑!求权威解答!我是这样想的:因为C语言的const和C++里的cons...

  某天看了一篇文章,文章下面的评论提到这个问题!本人很是困惑!求权威解答!

  我是这样想的: 因为C语言的const和C++里的const的语义不一样,所以呢为了保持向后兼容,就将基本类型字面值定义为非const.....展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部12345和345.5这样的都是字面常量。字面常量只能引用,不能修改,所以它们一般会被保存在符号表里而不是一般的数据区中。它们无法被取址,更不可能允许被修改。所以讨论它们是const还是非const没有意义。

  例外的情况是字符串字面常量(形如“abc”这样的),它们被存放在“文字常量区”,可以取得它们的首地址。在C语言和C++中,它们的const性有所不同,一下是引用自某帖子的原话:

  C 中的字符串字面量 hello 是数组类型 char[6](相应地,每个字符元素是无 const 限定的 char 型);作为右值使用的时候转换为指针类型 char*。

  之所以在 C 中字符串字面量不是 const 数组(也就是说每个字符元素的类型不是 char const),是因为 C

  要照顾或者考虑到标准制定之前已经存在的大量代码——那时的 C 语言还没有 const 关键字,如果硬性规定为 const 数组,则 char* p

  同样,为了使上述代码能顺利通过编译过程,C++ 采取了另外一种策略:它规定了字符串字面量的类型是 const

  数组,同时又特别规定了字符串字面量也可以有限制地转换为指向非常量的指针(对于 hello 来说就是

  char*),从而解决了上述代码中存在的问题。不过,转换到 char* 主要是为了兼容以前的代码,这种转换被 C++

  标准标记为“Deprecated”,所以在写程序的时候不应该依赖于这种转换。

  正是由于标准在类型上的不同规定造成了在 C 和 C++ 中字符串字面量常量性质上的差别。

  在现实中,经常可以看到用“字符串常量”来指代“字符串字面量”的情况,其实对于 C 来说这是不正确的,因为在 C 中字符串字面量不属于常量;而对于 C++ 来说,“字符串常量”和“字符串字面量”实际上是一回事,只不过看问题的角度不同罢了。

  顺便提一下:C++ 中的常量可以有对象常量(如字符串字面量、const 限定的对象)和非对象常量之分,而 C 中的常量不包含对象,它们最明显的特征就是不能进行取址运算,因此常量只能作为非左值(即右值)来使用。

  C 中的字符串字面量不是常量,它的每个字符元素也不是常量,所以字符元素的不可变性仅仅表现在语义层面,但在语法和约束条件上没有要求。而 C++

  中字符串字面量是常量,每个字符元素也是常量,因此在语义和约束条件两方面都要求不能改变其中的每个字符元素;另外,出于兼容性考虑 C++ 还存在着特殊情况下的向非 const 指针的转换。

  原帖地址:http冒号//bbs点chinaunix点net/thread-936821-1-1点html

http://halsoankan.com/zimianzhi/414.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有