zoukankan      html  css  js  c++  java
  • C++中的const的用法

    const对象、指向const对象的指针、const指针(通过一个面试题来了解)

     

    1.const对象

      (1)关于const,很多企业的笔试、面试都会出现,很简单,就问你“const的含义?”。

    我不清楚大家的回答,我的第一反应是常量,然后我想到了C#中关于const的解释(static and read-Only),于是我想到了只读,我只想到这么多。

    看一下答案吧:

    答:我只要一听到被面试者说:“const意味着常数”,我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着“只读”就可以了。尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。(如果你想知道更详细的答案,仔细读一下Saks的文章吧。)

    :)自己勉勉强强过关,下面有网友提供了更丰富一点的答案:

    1). 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)
    2). 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。
    3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现

    这个说明const在提高代码“可读性”,“健壮性”还是很有效的。

    2. 指向const对象的指针

    (1)

    //指向const对象的指针
    const int i = 1024;//注意初始化
    const int *ip = &i;

    (2)将const对象的地址给普通指针会编译出错

    const double d = 3.14;
    double *dp = &d;//error:因为dp会默认它所指向的对象是可修改的,如果正确的话,意味着可以通过*dp来修改d的值,这样显然不可以。

    (3)相反允许将非const对象的地址给”指向const对象的指针“

    double d = 3.14;
    const double *dp = &d;//ok:同理,dp默认d是const对象,所以不可以通过*dp来修改d的值

    3.const指针(注意:定义时必须初始化)

    (1)

    int i = 0;
    int *const ip = &i;

    (2)* 指向const对象的const指针

    const double d = 3.14;
    const double *const dp = &d;

    4.Tips

    (1)我们在阅读这类表达式时最好是“从右到左”的顺序,会便于理解

    (2)在表达式中我们可将*理解为“point to”,如

    const double d = 3.14;
    const double *const dp = &d;//dp is const point to double value which is const
  • 相关阅读:
    cf B. Sonya and Exhibition
    cf B. Sonya and Exhibition
    1000C
    1000C
    AOE网打印所有的关键路径
    AOE网打印所有的关键路径
    拓扑排序判断有向图是否成环
    拓扑排序判断有向图是否成环
    迭代器
    Dictionary Aizu
  • 原文地址:https://www.cnblogs.com/hoojjack/p/4229061.html
Copyright © 2011-2022 走看看