关于new和const

puppet_pyt 2017-07-28 10:42:04
我看到大部分说法是new不加修饰比如 int *p = new int;这个指针的指向的内容是不会被初始化且随机的,c++primer上也提到了,不过我在linux上测试的申请一直都是0;这个尚且可以用系统或编译器优化或那块内存本来就是0来解释,不过我来测试const的时候,因为const的对象必须初始化
如图如果使用const Const a,会报一个a未被初始化的错误,我查了一下,默认合成的构造函数是不会对类内数据初始化的,所以const对象a未被初始化,但是下面那句const Const *a = new Const,不也是应该调用默认的构造函数吗,但是却没有报错
...全文
286 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
codedoctor 2017-07-31
  • 打赏
  • 举报
回复
const Const *a = new Const 
这句话的意思是,a是一个常量指针,这个常量指针的指向位置不能被改变,但是指向的位置上的对象是可以改变的。 所以可以通过编译。因为,在初始化之后你依然可以对a指向的对象进行赋值。
真相重于对错 2017-07-28
  • 打赏
  • 举报
回复
const 修饰的是它右边第一个单词 所以 const Const 是指一个const的类对象,所以如你所说 const Const* 是指一个const*指针类型,所以他是指这个指针是const而不是指向的内容是const的
赵4老师 2017-07-28
  • 打赏
  • 举报
回复
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!
puppet_pyt 2017-07-28
  • 打赏
  • 举报
回复
我好像知道了 是不是a指向的内容不必要是const的
。。
puppet_pyt 2017-07-28
  • 打赏
  • 举报
回复
我的意思是const CONST*a这个a指针指向的内容应该是const的而new的对象调用默认构造函数不是应该没有初始化就像第一句会报未被初始化的错误
另外const CONST*a和CONST const*a是一样的修饰的都是a指向的内容应该为const
trytry1992 2017-07-28
  • 打赏
  • 举报
回复
话说你类名为啥也要叫const,我看了好几下愣是没看明白
唯恐天下不乱 2017-07-28
  • 打赏
  • 举报
回复
const Const a; const 修饰的是a const Const*a; const 修饰的是*a
trytry1992 2017-07-28
  • 打赏
  • 举报
回复
你试试 CONST const * a = new CONST
verphan 2017-07-28
  • 打赏
  • 举报
回复
指向的对象是常量不就和const Const a 一样了吗,为什么不用初始化? Const * const a 才是指针本身是常量吧,问题好像没解决吧..
战在春秋 2017-07-28
  • 打赏
  • 举报
回复
引用
没有报错
const Const *a = new Const  //这里的const是指a指向的对象是常值,而不是说a本身是常值。
补充: const是语言的关键字,建议不要取和关键字类似的标识符,这样代码的可读性不太好。

64,659

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧