const的使用

来源:互联网 发布:虚幻4 编程语言 编辑:程序博客网 时间:2024/05/16 10:04
  • 1.用于定义常量变量,这样这个变量在后面就不可以再被修改 。见Sub_1函数
  • 2.保护传参时参数不被修改,如果使用引用传递参数或按地址传递参数给一个函数,在这个函数里这个参数的值若被修改,则函数外部传进来的变量的值也发生改变,若想保护传进来的变量不被修改,可以使用const保护。见Sub_2函数
  • 3.网上有人说会节省内存,但我试了一下,发现并不会节省内存。见Sub_3函数
#include "iostream"#include "windows.h"using namespace std;#define PI 100VOID Sub_1(const int* );  VOID Sub_2(const int& a);VOID Sub_3();int main(){    int v2 = 6;    Sub_1(&v2);    Sub_2(v2);    Sub_3();    return 0;}VOID Sub_1(const int *v2){    const int v1 = 5;    int v3 = 5;    int a[v1];   //正确 v1是常量    //int b[v3];     //错误 表达式必须含有常量值    //v1 = 6;    // 错误    //*v2 = 8;   // 错误 不能给常量赋值,如果参数中没有const,那么v2将会被修改}VOID Sub_2(const int& v2){    //v2 = 8; // 错误 不能给常量赋值,如果参数中没有const,那么v2将会被修改}VOID Sub_3(){    const int Pi = 100;    // 在vs2015下调试发现 Pi占有一片内存,v1、v2、v3、v4、都占有内存空间    int v1 = Pi;    int v2 = Pi;    int v3 = PI;    int v4 = PI;}
  • 4.任何不会修改数据成员的函数都应该声明为const 类型。如果在编写const 成员函数时,不慎修改了数据成员,或者调用了其它非const 成员函数,编译器将指出错误,这无疑会提高程序的健壮性。例如:
#include "iostream"#include "windows.h"using namespace std;class My{public:    VOID Sub_1()const;    VOID Sub_2()const;    VOID Sub_3();private:    int v1;    int v2;};int main(){    return 0;}VOID My::Sub_1()const{//  v1 = 10;//  v2 = 10;    Sub_2();//  Sub_3();}VOID My::Sub_2() const{}VOID My::Sub_3(){}
  • 5.const和指针的搭配使用
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "iostream"#include "windows.h"using namespace std;VOID Sub_1();VOID Sub_2();VOID Sub_3();VOID Sub_4();VOID Sub_5();int main(){    Sub_1();    Sub_2();    Sub_3();    Sub_4();    Sub_5();    return 0;}// 普通指针VOID Sub_1(){    int v1 = 1;    int* p1 = &v1;    printf("%d\r\n", *p1);  // 输出 1    ++v1;    printf("%d\r\n", *p1);  // 输出 2    (*p1)++;    printf("%d\r\n", *p1);  // 输出 3}// const int* p1,不可以通过指针p1修改v1的值,但是可以修改存于p1的地址。VOID Sub_2(){    int v1 = 1;    int v2 = 2;    const int* p1 = &v1;    printf("%d\r\n", *p1);  //输出是 1    ++v1;    printf("%d\r\n", *p1);  //输出是2    //(*p1)++;    //printf("%d\r\n", *p1);    //错误,"p1":不能给常量赋值    p1 = &v2;    printf("%d\r\n", *p1);  // 输出是2}// const int* p1 和 int const *p1 是一样的.// 不可以通过指针p1修改v1的值,但是可以修改存于p1的地址。VOID Sub_3(){    int v1 = 1;    int v2 = 2;    int const *p1 = &v1;    printf("%d\r\n", *p1);  // 输出是1    ++v1;    printf("%d\r\n", *p1);  // 输出是2//  (*p1)++;//  printf("%d\r\n", *p1);  //错误,"p1":不能给常量赋值    p1 = &v2;    printf("%d\r\n", *p1);  // 输出是2}// int* const p1 ,p1里面的地址不能被修改,但是可以通过p1修改p1所指向的变量的值VOID Sub_4(){    int v1 = 1;    int v2 = 2;    int* const p1 = &v1;    printf("%d\r\n", *p1);  // 输出是1    ++v1;    printf("%d\r\n", *p1);  // 输出是2    (*p1)++;    printf("%d\r\n", *p1);  // 输出是3//  p1 = &v2;           // 错误  "p1":不能给常量赋值//  printf("%d\r\n", *p1);}VOID Sub_5(){    int v1 = 1;    int v2 = 2;    const int * const p1 = &v1;//  int const * const p1 = &v1; //这两句是一样的    printf("%d\r\n", *p1);  // 输出是1    ++v1;    printf("%d\r\n", *p1);  // 输出是2//  (*p1)++;    printf("%d\r\n", *p1);  //错误,"p1":不能给常量赋值//  p1 = &v2;    printf("%d", *p1);  //错误,"p1":不能给常量赋值}
0 0
原创粉丝点击