zoukankan      html  css  js  c++  java
  • c++ 基础知识 0001 const 知识2

    1.const修饰函数返回值

    (1)指针传递

    如果返回const data,non-const pointer,返回值也必须赋给const data,non-const pointer。因为指针指向的数据是常量不能修改。

    const int * mallocA(){ ///const data,non-const pointer

    int *a=new int(2);
    return a;
    }

    int main()
    {
    const int *a = mallocA();
    ///int *b = mallocA(); ///编译错误
    return 0;
    }

    2. 如果函数返回值采用“值传递方式”,由于函数会把返回值复制到外部临时的存储单元中,加const 修饰没有任何价值。所以,对于值传递来说,加const没有太多意义。

    所以:

      不要把函数int GetInt(void) 写成const int GetInt(void)。
      不要把函数A GetA(void) 写成const A GetA(void),其中A 为用户自定义的数据类型。


    3. 注意const int x和int const x的效果是完全一样的(const:常量)

    const int *p 和int *const p是不一样的,前者*p不可变,p可变;后者p不可变,*p可变

    总之,在const之后的东西(*p或者p)是常量,不可变

    结构体变量只能在定义的同时进行初始化,不能先定义再初始化


    4. 使用#define定义的变量是在编译时,直接进行替换,执行过程中读取操作数就是立即数寻址;使用const定义的变量,可能是直接寻址或者间接寻址等。速度的确会慢点。

  • 相关阅读:
    刚刚开通
    腾讯面试经历2015
    排序之归并排序
    AC自动机
    后缀数组初步
    概率dp初探
    【NOIP2015】反思+题解
    Built-in functions
    poj2528 Mayor's posters(线段树区间覆盖)
    Codeforces #317 C.Lengthening Sticks(数学)
  • 原文地址:https://www.cnblogs.com/rebot/p/10230749.html
Copyright © 2011-2022 走看看