C语言标准库中很多函数的参数都被 const 限制了,但我们在以前的编码过程中并没有注意这个问题,经常将非 const 类型的数据传递给 const 类型的形参,这样做从未引发任何副作用,原因就是上面讲到的,将非 const 类型转换为 const 类型是允许的。 下面...
const 通常用在函数形参中,如果形参是一个指针,为了防止在函数内部修改指针指向的数据,就可以用 const 来限制。 我们自己在定义函数时也可以使用 const 对形参加以限制,例如查找字符串中某个字符出现的次数: 运行结果: 3 4、const 和非const类型转换 const char *和char *是不同的类型,不能将const char *类型...
在很多情况下,const修饰的变量完全可以使用#define命令代替,const 通常用在函数形参中,在C标准库中有很多函数形参都用const限制了,为了防止在函数内部修改指针指向的数据,例如 fopen_s 四、const和非const类型的转换 当一个指针变量 str1 被 const 限制时,并且类似const char *str1这种形式,说明指针指向的数据不能...
(5)const_cast可以将常量转成非常量,但不会破坏原常量的const属性,只是返回一个去掉const的变量。
那为什么会有const呢?因为除了有常量的,还有变量的。 int float pi=3.14中的pi就是变量,pi是一个可以变化的量。 一个程序中,常量的使用较为简单,变量的使用非常多,特别是临时变量。 所以积累了大量对变量的维护经验,比如变量检查,给变量申请内存,释放内存等。
但是当我们非要对该常量去地址时,则编译器会为其临时分配一个内存,并将常量值存入该临时内存中,事实上,在C++中规定必须用const修饰的指针来指向const修饰的常量。虽然可以使用强制转换的方式,对Const修饰的常量进行去地址,并将其赋值给一个非Const修饰的指针(最好不要这样做),但打这个指针上的任何改动都只会影响...
在C++中将const char []转换为char *可以通过类型转换或者使用const_cast来实现。但需要注意的是,const char []是一个常量字符数组,而char *是一个指向字符的...
const_cast: 主要针对const和volatile的转换. static_cast: 一般的转换,no run-time check.通常,如果你不知道该用哪个,就用这个。 reinterpret_cast: 用于进行没有任何关联之间的转换,比如一个字符指针转换为一个整形数。 1)static_cast<T*>(a) 编译器在编译期处理 ...