char * const p和const char *p的区别】的更多相关文章

char * p = "abc"与const char *p = "abc"的区别是什么呢? 第一个语句会产生问题: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] 此时我们只需要改成第二个用法警告就消失了,这是为什么呢? 我们来分别理解以下两个语句,首先要清楚的是char * p语句定义的p是一个指针变量,假设我们用的是第一个语句,那么我们所表达的意思…
在C++程序中,经常用const 来限制对一个对象的操作,例如,将一个变量定义为const 的: const  int  n=3; 则这个变量的值不能被修改,即不能对变量赋值. const 这个关键字经常出现在函数的定义中,而且会出现在不同的位置,比如: int  strcmp (const   char  *str1,const    char  *str2); const    int  & min (int  &, int  &); void  printMessage (c…
const 是constant 的缩写,“恒定不变”的意思.被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性.所以很多C++程序设计书籍建议:“Use const whenever you need”. 1.用const 修饰函数的参数 如果参数作输出用,不论它是什么数据类型,也不论它采用“指针传递”还是“引用传递”,都不能加const 修饰,否则该参数将失去输出功能.const 只能修饰输入参数: 如果输入参数采用“指针传递”,那么加const 修饰可以防止意外地…
成员函数后面加const,表示在该函数中不能对类的数据成员进行改变,比如下面的代码: #include <stdio.h> class A { private: mutable int aa; public: A(){} int x() { printf("no const\n"); return aa++; } int x() const { printf("const\n"); return aa++; } }; int main() { A a1;…
下面来进行这段代码的分析: struct node {  //定义一个结构体node(节点)    int x;    int y;    int len;   //node中有3个成员变量x,y,len    bool operator <(const node &a)const {//重载<操作符.可以对两个node使用<操作符进行比较        return len<a.len;    } }; 括号中的const表示参数a对象不会被修改,最后的const表明调用…
“常量”与“只读变量”的区别. 常量肯定是只读的,例如5, "abc",等,肯定是只读的,因为常量是被编译器放在内存中的只读区域,当然也就不能够去修改它. “只读变量”则是在内存中开辟一个地方来存放它的值,只不过这个值由编译器限定不允许被修改.C语言关键字const就是用来限定一个变量不允许被改变的修饰符(Qualifier). 在ANSI C 语言中用enum类型和#define宏,这两个都可以用来定义常量. 类型声明中const用来修饰一个常量,有如下两种写法. 1).const在…
单个对象创建时,构造函数的调用顺序 1.首先判断该对象的类是否拥有父类,若有则先调用父类的构造函数 2.判断该对象的成员是否是其它类的成员,若是则调用成员变量的构造函数(调用顺序和声明顺序相同) 3.最后调用对象本身类的构造函数 单个对象被注销后,调用的析构函数与对应构造函数的调用顺序相反 参考下面示例,创建两个类Member,Test,然后Tesrt成员包含了Member类的成员: #include <stdio.h> class Member { const char* ms; publi…
我们从一个例子说起,来看上一篇文章中的String类, 我们为它提供一个下标操作符([ ])以读写指定位置的字符(char). 只要了解过C++的操作符重载的语法,很快就可以写出下面这个[]操作符重载函数:char& operator[](int posion)    // function_1 {      return data[posion]; };注意,这里该函数的返回值为一个引用,否则str[0] = 'c'这样的语句就会不合法,因为str[0]将是一个左值. 那么,是否提供这样一个f…
1.LBP and CSLBP 2.再论char c[]=”hello world”和char *str=”hello world”的区别 /**************代码1*********************/ char *strA() { char str[]="hello world"; return str; } /****************代码2****************/ const char *strA() { char *str="hell…
常量表达式是指值不会改变且在编译过程中就能够得到计算结果的表达式,能在编译时求值的表达式. 程序先编译再运行:  在编译阶段, 编译器将在编译过程中把用到该常量的地方都全都替换为 常量的值. 但是常量不是常量表达式, 只有用常量表达式初始化的常量 才是成为常量表达式,用非常量表达式初始化的常量仅仅是常量..如果常量的初始值不是常量表达式,则该常量不是常量表达式. 一个变量可以用constexpr类型说明符声明成 constexpr类型,  则变量是一个常量, 且声明为constexpr的变量必须…