标签: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();
结果为:
//单个的常量,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是一个指向常量的常量指针,指向的数据和指针的指向都不可以修改
标签:style blog http color sp for strong on 数据
原文地址:http://www.cnblogs.com/Vim0x3c/p/4134068.html