sunyongjie1984

天行健,君子以自强不息。

指针与引用定义习惯

int main()
{   
    
// modify start for coding rule and style
    
// the following way of comment is good
    /* 类型名 *&    const 对象名
     * int    *     const p // ok,p是const,不可以修改p的值,来改变指针对象p的指向
     * int    &     const r // bad,r是一个引用,定义时初始化到死绑定一人,qualifier const is ignored
     *                         // 这个const无意义
     *
     * 类型名 const *&    对象名   非常重要的意义
     * int    const *     p // ok,不可以通过p,去修改p指向的对象
     * int    const &     r // ok,不可以通过r,去修改r绑定的对象
     
*/
    
int i = 10;
    
int * const pp1 = &i;      // pp1为const对象,不可以修改pp1的值,来改变pp1的指向
    int & const rr1 = i;         // ignored,无意义

    rr1 
= 10;

    
int const * pp2 = &i;
    
int const & rr2 = i;

    
// *pp2 = 10;              // error
    
// rr2  = 10;                // error

                                   
// 用语言描述的方法,对象名前描述对象类型,对象名后描述const性质
    int a = 10;                  // 整型对象a为non-const
    int const b = 20;         // 整型对象b为const
    const int c = 20;         // 整型对象c为const
    int * p = &a;              // 指向non-const整形对象的指针对象p为non-const
                                  
// 程序员打算通过p修改a,程序员打算修改p
    int const * p2 = &a;    // 指向non-const或者const整型对象的指针对象p2为non-const
                                  
// 程序员不打算也不可以通过p2修改a,程序员打算修改p2
    int const * p3 = &b;    // 指向non-const或者const整型对象的指针对象p3为non-const
                                  
// 程序员不打算也不可以通过p3修改b,程序员打算修改p3
    int * const p4 = &a;    // 指向non-const整形对象的指针对象p4为const
                                  
// 程序员打算通过p4修改a,程序员不打算也不可以修改p4
    int const * const p5 = &a; // 指向non-const或者const整型对象的指针对象p5为const
                                        
// 程序员不打算也不可以通过p5修改a,程序员不打算也不可以修改p5 
    int const * const p6 = &b; // 指向non-const或者const整型对象的指针对象p6为const
                                       
// 程序员不打算也不可以通过p6修改b,程序员不打算也不可以修改p6 
    int & r = a;                     // 绑定到non-const整型对象的引用对象r为non-const
                                       
// 程序员打算通过r修改a
    int const & r2 = a;           // 绑定到non-const或者const整型对象的引用对象r2为const
                                       
// 程序员不打算也不可以通过r2修改a
    int const & r3 = b;           // 绑定到non-const或者const整型对象的引用对象r3为const
                                       
// 程序员不打算也不可以通过r3修改b
    
// add start for testing the above definition
    *= 10;                   // ok,通过p修改a
    ++p;                       // ok,修改p的值,以改变指针对象的指向

    
// *p2 = 10;               // error,不可以通过p2修改a,不是因为a为const,而是因为p2的定义
    ++p2;                      // ok,修改p2的值,以改变指针对象的指向

    
// *p3 = 10;               // error,不可以通过p3修改a,不是因为b为const,而是因为p3的定义
    ++p3;                      // ok,修改p3的值,以改变指针对象的指向

    
*p4 = 10;                  // ok,通过p4修改a
    
// ++p4;                   // error,修改p4的值,因为对象p4为const

    
// *p5 = 10;               // error,通过p5修改a
    
// ++p5;                   // error,修改p5的值,以改变指针对象的指向

    
// *p6 = 10;               // error,通过p6修改a
    
// ++p6;                   // error,修改p6的值,以改变指针对象的指向
    
// add end for testing the above definition
    
// 2011_12_01_syj


    
// int* p7 = &b;          // cannot convert from 'const int *' to 'int *'
                                  
// 对象b类型为const int,对象&b类型为const int*,对象p7类型为int*
                                  
// 程序员打算通过p7修改对象b,而对象b类型为const int,所以出错
    
// int& r6 = b;            // cannot convert from 'const int' to 'int &'
                                  
// 对象r6类型为int&, 对象b类型为const int
                                  
// 程序员打算通过r6修改b,而对象b类型为const int,所以出错
    // modify end for coding rule and style
    
// 2011_12_01_syj
}                     

posted on 2011-12-04 08:38 541981101211 阅读(118) 评论(0)  编辑 收藏 引用 所属分类: c++


只有注册用户登录后才能发表评论。
网站导航:   博客园   博客园最新博文   博问   管理