const的思考[6]

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 hustli 的 blog

                      { ((a*)this)->test=i; }//这里处理!
               private:
                      int test;  
               };
             6)最另类的处理:空间布局
               class a
               {
                public:
                      a(int i=0):test(i),c('a') {  }
                private:
                      char c;
                      const int test;
                };
                int main()
                {
                    a a(3);
                    a* pa=&a;
                    char* p=(char*)pa;    
                    int*  pi=(int*)(p+4);//利用边缘调整
                    *pi=5;                 file://此处改变了test的值!
                    return 0;
                 }
        虽然我给出了6中方法,但是我只是想说明如何更改,但出了第一种用法之外,另外5种用法,我们并不提倡,不要因为我这么写了,你就这么用,否则,我真是要误人子弟了:)
     (12)最后我们来讨论一下常量对象的动态创建。
           既然编译器可以动态初始化常量,就自然可以动态创建,例如:
           const int* pi=new const int(10);
           这里要注意2点:
           1)const对象必须被初始化!所以(10)是不能够少的。
           2)new返回的指针必须是const类型的。
           那么我们可不可以动态创建一个数组呢?
           答案是否定的,因为new内置类型的数组,不能被初始化。
           这里我们忽视了数组是类类型的,同样对于类内部数组初始化我们也做出了这样的忽视,因为这涉及到数组的问题,我们以后再讨论。

本文关键:const
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top