const修饰符使用

关键点:const 属于修饰符 ,修饰常量,const 修饰的位置很关键。

const修饰指针和修饰变量存在差异

修饰变量

const是常量修饰关键字,被它修饰的**变量**在定义时赋值,之后不能对这个变量赋值,如果强制进行赋值会产生出错处理,

int const a;与const int a;  //无差别

const int a[5]={1,2,3,4,5};
a[0]=3;/*出错,对数组a[]中任意一个再次赋值都会出错*/ 

int a[5]  //除了定义时赋值,再次对数组a[]中任何一个元素都可以赋值。
a[0]=3;   //ok

修饰指针

1、const int *a
  这里const 修饰的是int,而int定义的是一个整值
  因此*a 所指向的对象 值 不能通过 *a 来修改,但是 可以重新给 a 赋值,使其指向不同的对象。
  eg:
         const int *a = 0;
         const int b = 1;
         int c = 1;
         a = &b  //  额外:注意不能通过a 来修改 b值
         a = &c  //   额外:虽然c本身不是一个常量
         *a = 2  //error 为题就在这里,不能修改通过 *a 所指向的对象值,最后赋值得对象是c,因此不能通过*a 来修改c值。
2、int  *const a
  这里const修饰的是 a ,a代表的是一个指针地址
  因此不能赋给a其他的地址值,但可以修改a指向的值
  这有点和cont int *a相反的意味,例子就不说了

3、补充:
  1、int const *a 和 const int *a 的意义相同、作用等价;
  

4、 const int *const a
    a所指向的对象及对象的值均不可改变;

5、总结
  5.1、const 对象的地址只能赋值给指向const 对象的指针;
  5.2、指向const 对象的指针可以 被赋 以 一个非const 对象的地址 ;
  5.3、指向const 的指针常被用作函数的形参,保证被传递给函数的实际对象在函数得实际对象在函数中不会被修改;
  5.4、常量在定义后就不能被修改,所以它必须被初始化。未初始化的常量定义将导致编译错误(上面都是在说明const的问题,所以没有赋值,实际语句中要赋值的)

原文地址:https://www.cnblogs.com/retry/p/11821027.html

时间: 2024-10-05 06:22:24

const修饰符使用的相关文章

C++中 容易忽视的const 修饰符

C++可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的有点: (1)const常量有数据类型,而宏常量没有数据类型.编译器可以对const进行类型安全检查,而后者只进行字符替换,没有类型安全检查,并且在字符替换中可能会产生意料不到的错误!(如类型不匹配问题) (2)编译器处理方式不同.define宏是在预处理阶段展开,const常量是编译运行阶段使用. (3)存储方式不同.define宏仅仅是展开,有很多地方使用,就展开多少次,不会分配内存.const常量会在内存

[Reprint]C++函数前和函数后加const修饰符区别

c++中关于const的用法有很多,const既可以修饰变量,也可以函数,不同的环境下,是有不同的含义.今天来讲讲const加在函数前和函数后面的区别.比如: 01 #include<iostream> 02   03 using namespace std; 04   05 // Ahthor:  过往记忆 06 // E-mail:  [email protected] 07 // Blog:    http://www.iteblog.com 08 // 转载请注明出处 09   10

新标准中set的迭代器it有const修饰符,如何去掉

新的C++11标准中,set的迭代器it有const修饰符,那么对它元素的修改就必然不能成功了.但是有时候遇到要修改stl set元素的问题,这个问题一般的解决方法是先erase这个元素,然后再insert.如果利用const_cast(*it)把it映射成一个引用的对象,那么就可以对它进行修改了.const_cast<node*>(&(*it))->b = 10;

Delphi 中 函数参数中的 const 修饰符的本质以及注意事项

来自:http://blog.csdn.net/farrellcn/article/details/9096787 ------------------------------------------------------------------------------ 很多书籍中说函数参数如果是String类型的,如果在函数内部不改变参数的值,使用 const 修饰符会加快程序的执行速度,至于如何加快的?有的人说是因为 const 函数保证了参数字符串不会被复制.以前也没有对这个问题深入研究

【C语言】函数参数中的const修饰符

  通常,字符串操作函数原型中,都会在形参前面加上const修饰符,表示此指针不能用于修改字符串的值   比如:char *strcpy(char *strDest, const char *strSrc)  但是可不可以通过 在函数里定义一个指针指向strSrc,来改掉字符串的值呢? 给出以下代码: #include <STDIO.H> #include<stdlib.h> void fuc(const char *p) { char *q = p; *q='b'; } int

C++ 成员函数前和函数后加const修饰符区别

博客转载自: https://www.iteblog.com/archives/214.html 分析以下一段程序,阐述成员函数后缀const 和 成员函数前const 的作用 #include<iostream> using namespace std; class TestClass { public: size_t length() const; const char* getPContent(); void setLengthValid(bool isLengthValid); pri

const修饰符简述

1.const限定符的使用 1)定义const常量:const可以将一个对象变成常量,不可被修改(只读类型),在定义时必须进行初始化.例如: const double mathPI = 3.141592653; 2)修饰函数的参数.返回值等.被const修饰的东西将不再改变: 3)若在整个程序中使用其他文件的变量: //若变量为非const //file_1.cpp int months = 10; //file_2.cpp extern int months; //const修饰的变量 //f

static extern const修饰符

const const修饰的东西不能被修改(由左至右解读-->顺时针螺旋法则) 指针类型根据位置的不同可以理解成3种情况: 1.常量指针 NSString * const pt1; //常量指针,指向一个字符串 //pt1初始化之后不能赋值,指向的对象值可以修改. //定义字符串常量 //NSString* const [email protected]"123"; @"123"存储在文字常量区,相同的字符串只存储一份 NSString* [email pro

const修饰符

  一. 类的const对象   const 意谓着只读 意谓着所标记的类成员变量不成出现在=号的左边. 构造函数析构函数除外. const Tdate d1(1988,8,18); //比如在存放出生日期的时候,我们不希望出生时间被修改,可以用const修饰 二.const成员函数   const放在函数尾部 void fun(int a)const { fun1() const; }; 注意: 1.建议将所有不修改成员变量的函数,用const修饰 2.  const A a; a.fun()