• [C++]const修饰符


    Date

    2014-1-1

     

    Summary

    const 修饰符笔记 
     

    Contents

    1.const 修饰符 

    声明一个常量数据类型 , 在编译时就确定数据类型 

     

    2.const 与 指针 

    一般情况会有两种: const 在 *的左边或者右边 

    (1)const 在 * 左边 

    则无法通过该指针修改其指向的内存的值 

    ex: 

    int num = 10; 

    const int* p = # 

    //如果(*p)++ ,则编译器报错  

     

    (2)const 在*右边 

    则无法让该指针指向其他内存空间 

    int num1 = 10; 

    int num2 = 20; 

    int* const p = &num1; 

    //如果 p = &num2,则编译器报错,但是可以(*p)++ 

     

    3.const 与函数参数 

     尽量把函数的形参声明为const指针,这样的好处: 

    (1)函数的实参可以使用const指针和非const指针,否则函数不接受const指针 

    (2)函数内部不能修改const指针指向的数据,避免函数内部污染数据 

     
     

    Notes

    Nothing Here 
     

    Sample
     

     1 /**
     2  *  普通方法
     3  *
     4  *  @param nNum1 nNum1 description
     5  *  @param nNum2 nNum2 description
     6  *
     7  *  @return return value description
     8  */
     9 int add1(int nNum1,int nNum2)
    10 {
    11     return nNum1 + nNum2;
    12 }
    13 
    14 /**
    15  *  形参为 非const指针
    16  *
    17  *  @param pNum1 pNum1 description
    18  *  @param pNum2 pNum2 description
    19  *
    20  *  @return return value description
    21  */
    22 int add2(int* pNum1,int* pNum2)
    23 {
    24     return (*pNum1) + (*pNum2);
    25 }
    26 
    27 /**
    28  *  形参为 const指针
    29  *
    30  *  @param pNum1 pNum1 description
    31  *  @param pNum2 pNum2 description
    32  *
    33  *  @return return value description
    34  */
    35 int add3(const int* pNum1,const int* pNum2)
    36 {
    37     return (*pNum1) + (*pNum2);
    38 }
    39 
    40 int main(int argc, const char * argv[])
    41 {
    42 
    43     // insert code here...
    44     std::cout << "Hello, World!
    ";
    45     
    46     cout << "test 1 start." << endl;
    47     
    48     int num1 = 10;
    49     int num2 = 20;
    50     int* p1 = &num1;
    51     
    52     cout << "num1 : " << num1 << "
    " << "pNum1 : " << (*p1) << endl;
    53     cout << "add self by pointer :" << endl;
    54     
    55     (*p1)+=1;
    56     
    57     cout << "num1:"<< num1<< endl;
    58     cout << "use const pointer 
    
    
    " << endl;
    59     
    60     const int* p2 = &num2;
    61     p1 = &num2;
    62     (*p1)++;
    63     // (*p2)++; //note:编译器报错,不能修改num2内存中得值
    64     p2 = &num1; //note:p2的指可以被修改,即可以指向其他内存空间
    65     
    66     int* const p3 = &num1;
    67     (*p3)++;
    68     // p3 = &num2; // note:编译器报错,不能修改p3的值,即永远指向num1的内存空间
    69     
    70     
    71     cout << "test 2 start." << endl;
    72     cout << "call [add1] method :" << add1(num1,num2) << endl;
    73     
    74     // 使用非const的指针作为实参
    75     cout << "call [add2] method :" << add2(p1,p1) << endl;
    76     
    77     // 使用const的指针作为实参,编译报错
    78     // cout << "call [add2] method :" << add2(p1,p2) << endl;
    79     
    80     // 在add3,由于形参的指针被const修饰,则实参可以接受 const指针 和 非const指针
    81     cout << "call [add3] method :" << add3(p1,p2) << endl;
    82 
    83 
    84     
    85     return 0;
    86 }
    View Code 

     

    THE END 

    人生就是一局不能Again的DOTA
  • 相关阅读:
    Java Spring AOP用法
    Spring IOC的简单实现
    随机数
    Java 正则表达式
    日期格式转换
    maven settings.xml详解
    JSP与Servlet的关系
    EL表达式学习
    FreeMarker学习2
    FreeMarker学习
  • 原文地址:https://www.cnblogs.com/hellenism/p/3500667.html
Copyright © 2020-2023  润新知