码迷,mamicode.com
首页 > 编程语言 > 详细

c++ const详解

时间:2014-12-01 06:28:07      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   sp   for   strong   on   数据   

0x01:const常量
1 const int num = 10;
2 int a[num] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
3 cout << sizeof(a) << endl;//sizeof(a) 为 40

 

 C++编译器对const做了优化,引用常量的地方,直接替换常量,不读内存,读取常量符号表
const int num = 10;
int *p = const_cast<int *>(&num);*p = 5;
cout << num << endl;//打印结果 10
cout << *p << endl;//打印结果 5
cin.get();

//C++编译器对const做了优化,引用常量的地方,直接替换常量,不读内存,读取常量符号表
const变量,在内存,可以修改,不能生效,C语言读取内存的值,c++不读内存


0x02:const数组
 1 const int a[5] = { 1, 2, 3, 4, 5 };
 2 
 3 for (int *p = const_cast<int *>(a); p<a + 5; p++)
 4 {
 5     *p += 1;
 6 }
 7 
 8 for (int i = 0; i < 5; i++)
 9 {
10     cout << a[i] << endl;
11 }
12 cin.get();
结果为:

bubuko.com,布布扣

//单个的常量,C++不读内存,读常量符号表
//常量数组,C++读内存

 

 

 

0x03:const参数


1 void print( const int x)//不能给常量赋值,const作为参数,表明权限问题,在函数内不可以修改
2 {
3     //x = 10;//不能给常量赋值
4 }

const作为参数表权限问题,在函数内不可以修改,杜绝你随便乱玩。


0x04:const引用


1 void print(const int & rnum)//引用一个变量,限定在函数内不可以修改

 


1 int num = 100;
2 
3 const int & rnum = num;//引用的数据,不能通过引用名来修改
4 
5 int const& rnum = num;//如果const在右边,编译器会忽略&右边的const

 


0x05:const与类
 1 //构造,析构函数,不可以加上const修饰符
 2 class MyClass
 3 {
 4 public:
 5     int x;
 6     int y;
 7     MyClass() :x(10), y(100)
 8     {
 9 
10     }
11     ~MyClass() 
12     {
13 
14     }
15     void set()  
16     {
17         x = 101;
18         y = 10 + x;
19     }
20     int get() const
21     {
22         return x + y;
23     }
24 };
25 
26 void  main()
27 {
28     const MyClass *p ( new MyClass);
29     p->get();//const对象,只能读成员,不可以写成员
30 }

\const成员没有初始化的情况下,可以被构造函数初始化
 1 class MyClass
 2 {
 3 public:
 4     int x;
 5     const int y;//const成员没有初始化的情况下,可以被构造函数初始化,即使有初始值也可以被构造函数初始化
 6     MyClass(int a, int b,) :x(a), y(b)
 7     {
 8 
 9     }
10     ~MyClass() 
11     {
12 
13     }
14     void set()  
15     {
16         x = 101;
17         y = 10 + x;
18     }
19     int get() const
20     {
21         return x + y;
22     }
23 
24 private:
25 
26 };

//类的成员是const不能被成员函数修改
class MyClass
{
public:
    const int x;
    const int y;
    MyClass() :x(10), y(100)
    {

    }
    ~MyClass() 
    {

    }
    void set()  //类的成员是const不能被成员函数修改
    {
        x = 101;
        y = 10 + x;
    }
};
1 myclass my1(100,200);
2 cout << my1.x << endl;
3 
4 const int *p = &my1.x;//取变量地址
5 int *px = const_cast<int *>(p);//变化指针
6 *px = 123;
7 
8 cout << my1.x << endl;//123 类的成员是const常量,可以去掉const属性修改

 

(1)类的成员是const
1.const没有初始化的情况,可以被构造初始化,即使有初始值,也可可以被构造函数初始化赋值
2.类的成员是const,不可以被成员函数更改,可以读取
3.类的成员是const常量,可以去掉const属性修改

(2)类的成员函数const,限定不可以修改类的成员变量,只能读

(3)类的成员函数参数前面有const,参数只能读,不能改

(4)const如果作为类成员函数参数的返回类型修饰符,作为指针的话,限定只能通过这个指针读,不可以写。


0x06:const指针
const在*号左边,限定指向的数据不可以改,可以改变指向
1 const int *p(new int(5));//const在*号左边,限定指向的数据不可以改,可以改变指向
2 //*p = 3;const在*号左边,限定指向的数据不可以改
3 p = new int(10);//可以改变指向

 

const在*右边,限定指针的指向不可以改变,可以改变指针指向的数据
int * const p(new int(5));//const在*右边,限定指针的指向不可以改变,可以改变指针指向的数据

*p = 3;//可以改变指针指向的数据

//p = new int(10);const在*右边,限定指针的指向不可以改变

 

p是一个指向常量的常量指针,指向的数据和指针的指向都不可以修改
1 int const * const p(new int(5));
2 //p是一个指向常量的常量指针,指向的数据和指针的指向都不可以修改

 




c++ const详解

标签:style   blog   http   color   sp   for   strong   on   数据   

原文地址:http://www.cnblogs.com/Vim0x3c/p/4134068.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!