const,即constant,字面上即是常量。
const是C++的关键字,在C99中,const也是关键字,但二者对const的定义却不相同
区别1:
在C++中,const用于修饰对象、成员函数;当修饰对象时,表示该对象是常量,是不可修改的,不可修改意味着只能读,不能写;修饰成员函数时,表明该成员函数不会改变类中的成员数据,可为const/non-const对象所调用,但non-const对象只能调用const成员函数。总而言之,C++中的const是我们给编译器的信息,告诉编译器我们定义的这些对象是const的,是不能被修改的或者这些成员函数是const的,如果我们在后续的编码中违反了这些规则,那么在编译期编译器将给予我们错误警告
C中的const是在C++的const出现之后才决定引进的,但C对const的定义并不象C++一样,而是跟C++不兼容,C中的const具有read-only属性,但是,const的属性可以被选择忽略从而被改写。
以下简单举例说明:
C++:
const int val = 10;
val = 20; // error,编译期即可给出错误信息
int *ptr = const_cast<int*>(&val);
*ptr = 20; // 此时,*ptr为20,而val仍为10,并且ptr == &val
C:
const int val = 10;
val = 20; // 低版本的GCC是OK的,高版本的GCC会报错
int *ptr = (int*)&val;
*ptr = 20; // OK,之后val的值为20,read-only达不到原来的read-only目的
区别2:
在C++中,const对象默认是static linkage,即只具有内部链接属性,即只有本TU才能用到它
在C中,const对象默认是external linkage,即具有外部链接属性,即其它TU通过声明即可使用到它
结论:C的const跟C++的const在语义上是完全不一样的,使用时需要小心地区别对待;ps,C引进的const跟C++不兼容,这不能不说是一个败笔,也可以说,C的const本身就是鸡肋,没啥用
const是C++的关键字,在C99中,const也是关键字,但二者对const的定义却不相同
区别1:
在C++中,const用于修饰对象、成员函数;当修饰对象时,表示该对象是常量,是不可修改的,不可修改意味着只能读,不能写;修饰成员函数时,表明该成员函数不会改变类中的成员数据,可为const/non-const对象所调用,但non-const对象只能调用const成员函数。总而言之,C++中的const是我们给编译器的信息,告诉编译器我们定义的这些对象是const的,是不能被修改的或者这些成员函数是const的,如果我们在后续的编码中违反了这些规则,那么在编译期编译器将给予我们错误警告
C中的const是在C++的const出现之后才决定引进的,但C对const的定义并不象C++一样,而是跟C++不兼容,C中的const具有read-only属性,但是,const的属性可以被选择忽略从而被改写。
以下简单举例说明:
C++:
const int val = 10;
val = 20; // error,编译期即可给出错误信息
int *ptr = const_cast<int*>(&val);
*ptr = 20; // 此时,*ptr为20,而val仍为10,并且ptr == &val
C:
const int val = 10;
val = 20; // 低版本的GCC是OK的,高版本的GCC会报错
int *ptr = (int*)&val;
*ptr = 20; // OK,之后val的值为20,read-only达不到原来的read-only目的
区别2:
在C++中,const对象默认是static linkage,即只具有内部链接属性,即只有本TU才能用到它
在C中,const对象默认是external linkage,即具有外部链接属性,即其它TU通过声明即可使用到它
结论:C的const跟C++的const在语义上是完全不一样的,使用时需要小心地区别对待;ps,C引进的const跟C++不兼容,这不能不说是一个败笔,也可以说,C的const本身就是鸡肋,没啥用