C++入门-const常量限制与const指针

看一个例子:在C语言中实现圆面积计算

 1 #include <stdio.h>
 2 
 3 #define PI 3.14
 4 
 5 int main(int argc, char const *argv[]) {
 6     float r = 0.5;
 7     float n = PI * r * r;
 8     printf("n=%f
", n);
 9     return 0;
10 }

在上面的宏定义PI,并不知道他的类型,没有类型检查,只是简单替换。

在C++中,有一个新的关键字const常量--在所在生命周期内,其值不变,常量一旦定义了,就不可以再次赋值,所以要在定义时赋值。

const float FPI = 3.14;

编译器在程序编译时期做检查,即const常量在程序编译的时候不可以修改

2、const 指针

例子:

 1 #include <iostream>
 2 #include <string>
 3 using namespace std; 7 
 8 int main(int argc, char const* argv[]) {
 9     char* p = "Hello World!";
10     p[0] = 'a';
11     return 0;
12 }

编译通过,执行时段错误。因为字符串常量分配的内存可见只允许读不可写。

1) const TYPE* / TYPE const*

通过加上const修饰指针,const在*前面, 使编译时检查,表示指针指向的内容不可修改,但是指针的值可以改变。

    char const* p = "Hello World!";
    const char* p2 = "Hello World!";

    char* p3 = nullptr;
    p = p3;

2) TYPE* const

    char szBuf[256] = "Hello World!";
    char* const p = szBuf;
    p[0] = 'A';
    //p = nullptr;   //error:assignment of read-only variable ‘p’

3)const_cast

可以用于去除const修饰

    const int n = 5;
    // int* p = (int*)&n;
    int* p = const_cast<int*>(&n);
    *p = 1;
原文地址:https://www.cnblogs.com/y4247464/p/13813563.html