c++中关于const的用法有很多,const既可以修饰变量,也可以函数,不同的环境下,是有不同的含义.今天来讲讲const加在函数前和函数后面的区别.比如: 01 #include<iostream> 02   03 using namespace std; 04   05 // Ahthor:  过往记忆 06 // E-mail:  wyphao.2007@163.com 07 // Blog:    http://www.iteblog.com 08 // 转载请注明出处 09   1…
class Test(){ public: Test(){} const int foo(int a); const int foo(int a) const; }; 一.概念 当const在函数名前面的时候修饰的是函数返回值. 当const在函数名后面表示是常成员函数,该函数不能修改对象内的任何成员,只能发生读操作,不能发生写操作. 二.原理: 我们都知道在调用成员函数的时候编译器会将对象自身的地址作为隐藏参数传递给函数,在const成员函数中,既不能改变this所指向的对象,也不能改变thi…
博客转载自: 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…
比如 void Fun() const; 的const是修饰什么的? 其实是修饰this指向的对象的. 这篇文章很详细的说明了const的作用,其中第三点说明了这种const的作用:const的用法,特别是用在函数前面与后面的区别! 在该函数Fun()内不能进行对成员变量的修改,调用非const的成员函数也不行…
类型前加const修饰符限定变量为只读,称为常量,定义时必须初始化,且初始化后编译器不允许再修改常量的值. 一.常量的定义 const在类型前面 const int value: //value是const const char *value; //*value是const, value可变 const (char *) value; //value是const,*value可变 char* const value; //value是const,*value可变 const char* cons…
http://blog.csdn.net/gmstart/article/details/7046140 在C++的类定义里面,可以看到类似下面的定义: 01 class List { 02 private: 03      Node * p_head; 04      int length; 05      …… 06 Public: 07      int GetLength () const; 08      bool GetNodeInfo(const int index,Node &…
const在函数前与函数后的区别 一   const基础           如果const关键字不涉及到指针,我们很好理解,下面是涉及到指针的情况:           int   b   =   500;      const   int*   a   =   &b;              [1]      int   const   *a   =   &b;              [2]      int*   const   a   =   &b;         …
C++: C++函数声明的时候后面加const 转自:http://blog.csdn.net/zhangss415/article/details/7998123 非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误),表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中,任意修改它所在的类的成员的操作都是不允许的(因为隐含了对this指针的const引用):唯一的例外是对于mutable修饰的成员.加了const的成员函数可以被非const对象和co…
一.用const修饰函数的参数 函数参数类型前加const指明该参数为常量,在函数内部不可改变. void func(const int x) { //x不可以在内部进行赋值等操作. } 注:当参数为引用传递或者指针传递作为输出时,都不能加const 二.用const修饰函数的返回值 函数返回时,会把返回值复制到外部临时的存储单元中,存储类型由函数的返回类型来确定. "值传递"加const修饰没有任何价值. "址传递"加const修饰,函数返回值只能被赋给加cons…
来自:http://blog.csdn.net/farrellcn/article/details/9096787 ------------------------------------------------------------------------------ 很多书籍中说函数参数如果是String类型的,如果在函数内部不改变参数的值,使用 const 修饰符会加快程序的执行速度,至于如何加快的?有的人说是因为 const 函数保证了参数字符串不会被复制.以前也没有对这个问题深入研究…
1.字符串输出输入函数 读入字符串的方法: 1) scanf 特点:不能接收空格 2) gets 特点:可以接受含有空格的字符串 ,不安全 3) fgets(); 特点:可以帮我们自动根据数组的长度截取适当的长度保存,安全 如果输入的长度大于数组的长度,自动将数组最后一个元素保存为\0 如果输入的长度小于数组的长度,会自动先保存\n,再保存\0   使用格式:fgets(ch,sizeof(ch),stdin); 输出字符串的方法: 1) printf() %s   缺点:不能自动换行 2) p…
如果输入参数采用“指针传递”,那么加 const 修饰可以防止意外地改动该指针,起 到保护作用. #include <iostream> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ using namespace std; //定义栈的尺寸 ; //定义处理栈的类模板接口 template <class T>…
简单分为:全局作用域.局部作用域.语句作用域 如果希望在局部变量的作用域内使用同名的全局变量,可以在该变量前加上“::” ::aver=20 #include<iostream> using namespace std; int var = 20; int main(int argc, char *argv[]) {     int var = 10;     cout<<var<<endl;   //10     cout<<::var<<en…
C/C++ 中 const 修饰符用法总结 在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家梳理一下知识,给大家一点点帮助.作者是菜鸟一枚,难免出错,还望各位大牛不吝赐教. 首先,来看看const的基本含义.在 C/C++ 语言中,const关键字是一种修饰符.所谓“修饰符”,就是在编译器进行编译的过程中,给编译器一些“要求”或“提示”,但修饰符本身,并不产生任何实际代码.就 const…
在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家梳理一下知识,给大家一点点帮助.作者是菜鸟一枚,难免出错,还望各位大牛不吝赐教. 首先,来看看const的基本含义.在 C/C++ 语言中,const关键字是一种修饰符.所谓“修饰符”,就是在编译器进行编译的过程中,给编译器一些“要求”或“提示”,但修饰符本身,并不产生任何实际代码.就 const 修饰符而言,它用来告诉编译器,被修饰的这些东…
感谢原创作者,写的好详细.不忍错过,所以转载过来了... 原文地址: https://www.cnblogs.com/icemoon1987/p/3320326.html 在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家梳理一下知识,给大家一点点帮助.作者是菜鸟一枚,难免出错,还望各位大牛不吝赐教. 首先,来看看const的基本含义.在 C/C++ 语言中,const关键字是一种修饰符.所…
C++可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的有点: (1)const常量有数据类型,而宏常量没有数据类型.编译器可以对const进行类型安全检查,而后者只进行字符替换,没有类型安全检查,并且在字符替换中可能会产生意料不到的错误!(如类型不匹配问题) (2)编译器处理方式不同.define宏是在预处理阶段展开,const常量是编译运行阶段使用. (3)存储方式不同.define宏仅仅是展开,有很多地方使用,就展开多少次,不会分配内存.const常量会在内存…
Date: 2014-1-1 Summary: const 修饰符笔记 Contents: 1.const 修饰符 声明一个常量数据类型 , 在编译时就确定数据类型 2.const 与 指针 一般情况会有两种: const 在 *的左边或者右边 (1)const 在 * 左边 则无法通过该指针修改其指向的内存的值 ex: int num = 10; const int* p = &num; //如果(*p)++ ,则编译器报错 (2)const 在*右边 则无法让该指针指向其他内存空间 int…
//区别⑦:三目运算符(C++版本) #include<iostream> using namespace std; //三目运算符 C语言返回变量的值 C++语言是返回变量本身 void main(){ ; ; a < b ? a : b = ; //C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方 //注意: //三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用 //(a < b ? 1 : b) = 30; system("paus…
const修饰符相关 const修饰符表明一个变量是常量,大致分为三类:常量数组(等同于常量指针),常量指针,指向常量的指针. 常量数组中数据都是不可修改的,任何试图修改常量数组中的数据的操作都会报错. 常量指针,指针本身是常量,是不可以修改它的指向的,但是可以修改它指向变量的数值,它的修饰符一般放在中间,形如:int* const p. 指向常量的指针,指针用于指向常量,因为常量具有不可修改的特点,所以任何希望通过普通指针来指向常量然后来修改常量的行为是非常恶劣的.所以如果想指向常量,就要通过…
1.非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误)2.表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中,    任意修改它所在的类的成员的操作都是不允许的(因为隐含了对this指针的const引用):3.唯一的例外是对于mutable修饰的成员.    加了const的成员函数可以被非const对象和const对象调用    但不加const的成员函数只能被非const对象调用   char getData() const{        r…
class c { public: returnType functionName (parameter list) const; //这个函数不会修改类成员 const returnType functionName (parameter list); //返回常量 private: ........... };…
看到(C++ Primer)类的成员函数这里,突然对成员函数形参列表后面的const感到迷惑. 因为书中开始说是修饰隐含形参this的,然后又说是声明该函数是只读的. 大为不解! 翻资料.找人讨论... 最终恍然大悟: 还是书里说的对,那个const 修饰的是隐参this(const ClassName *const this),而this指向调用该函数的对象,所以不能通过this修改对象的内容. 既然不能修改对象的内容,那就不能调用其它非const this 的函数--因为可能会修改内容. -…
非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误),表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中,任意修改该类中成员的操作都是不允许的(因为隐含了对this指针的const引用):唯一的例外是对于mutable修饰的成员. 加了const的成员函数可以被非const对象和const对象调用,但不加const的成员函数只能被非const对象调用.例如: class A { private: int m_a; public: A() : m_a(…
我们定义的类的成员函数中,常常有一些成员函数不改变类的数据成员,也就是说,这些函数是"只读"函数,而有一些函数要修改类数据成员的值.如果把不改变数据成员的函数都加上const关键字进行标识,显然,可提高程序的可读性.其实,它还能提高程序的可靠性,已定义成const的成员函数,一旦企图修改数据成员的值,则编译器按错误处理. const成员函数和const对象 实际上,const成员函数还有另外一项作用,即常量对象相关.对于内置的数据类型,我们可以定义它们的常量,用户自定义的类也一样,可以…
原文为MySQL 5.7 官方手册:12.20.2 GROUP BY Modifiers 一.ROLLUP 修饰符的意义 GROUP BY子句允许添加WITH ROLLUP修饰符,该修饰符可以对分组后各组的某个列的结果值进行汇总,并在结果中输出,即提供更高一级的聚合操作. 因此,ROLLUP使您能够使用单个查询在多个分析级别回答问题.例如,ROLLUP可用于为OLAP(在线分析处理)操作提供支持. 现在有一个示例销售表如下: CREATE TABLE sales ( year INT, coun…
const int a; int const a; 这两个写法是等同的,表示a是一个int常量. 简记:const后面是什么就限定什么(因为C++标准规定,const关键字放在类型或变量名之前等价的).比如const int *p就是限定(*p),(*p)就是p指向的那段内存不能变,p的值可以改变:如果是int* const p就是限定p指针的值(p指向的对象). , b=; //声明变量. int *p; p=&a; //声明指针. *p=; 则const int *p限定(*p),*p不能变…
const用在成员函数后 主要是针对类的const 对象 如: class Text{ public:     void printconst(void)const{cout<<"hello"<<endl;}     void print(void){cout<<"hello"<<endl;} private:     int k; }; const Text a; //上面定义了类Text的一常量对象 int mai…
通过把类成员函数声明为const   以表明它们不修改类对象. 任何不会修改数据成员的函数都应该声明为const类型.如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误,这样做的好处是提高程序了的健壮性.…
声明一个成员函数的时候用const关键字是用来说明这个函数是 "只读(read-only)"函数,也就是说明这个函数不会修改任何数据成员(object). 为了声明一个const成员函数, 把const关键字放在函数括号的后面.声明和定义的时候都应该放const关键字. 任何不会修改数据成员的函数都应该声明为const类型.如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性. #include<ios…