• 如何牢记C/C++中const的用法?


    (下面以 typename 表示C/C++内某一类型

    我常常会搞混 const 放在 typename* 的前面和后面的区别,今天特地查看了它们两个各自的含义,总结了一下:

      const typename* ptr 是指 ptr 是个指向常量的指针( pointer to constant data ),它认定所指向的内容是个常量,因此不能通过 *ptr 来改变它所指向的内容。比如说:

       1 const int apple = 0;

       2 const int* thirstyBoy = &apple;

       3 (*thirstyBoy)=1;

      编译器会在第三行报错。可以这样记忆:const typename* ptr, 因为 const 后面就是 typename ,所以是 ptr 所指向的类型为 typename 的量不能改变。

      

      typename * const ptr 就很容易理解了,因为 const 后面就是ptr,所以 ptr 是常量,不能改变ptr的值,因此叫做指针常量( constant pointer ), 如果试图改变 ptr 的内容:

         1  int apple = 0 , banana = 1;

       2  int * const thirstyBoy = &apple;

       3  thirstyBoy = &banana;

      编译器会在第三行报错。

    注1:const typename* ptr 的 ptr 虽然认定它所指向的内容是个常量,但它也可以指向一个变量:

       1 int apple = 0;

       2 const int* thirstyBoy = &apple;

      这是合法的,然后也可以直接通过给 apple 赋值改变 apple 的值:

       3 apple = 1;

      但就是不能通过 *thirstyBoy 改变 apple 的值。

    注2:上面所有的 const typename 都可以替换为 typename const 哦 :)

    ————感受到了一点C语言设计之精巧

  • 相关阅读:
    RMQ(非log2储存方法)
    2016年5月份学习记录
    NOIP200504循环
    膜拜acm大牛 虽然我不会这题,但是AC还是没有问题的~(转自hzwer)
    最长公共子序列的长度
    菜鸟,大牛和教主三者的区别(转自hzwer)
    NOIP201205Vigenère密码
    NOIP200503采药
    公路乘车
    NOIP200902分数线划定
  • 原文地址:https://www.cnblogs.com/Luxuer/p/5695968.html
Copyright © 2020-2023  润新知