C++基础:const及处理类型

#include<stdio.h>
#include<iostream>
using namespace std;

int main()
{
    cout.precision(10);

    // *****************const***************//

    //const限定符  即定义一个不会更改的变量
    const double PI = 3.1415926;
    const double E = 2.7;
    //E = 2; 报错 不可更改
    cout << PI <<" "<< E << endl;

    //可定义为表达式的运算结果 定义后就不会改变
    int v = 10;
    const double n = PI + v;
    v = v + 2;
    cout <<"express: "<< n << endl;

    //const的引用 引用即别名
    const int G = 124;
    const int &g = G;
    // g和G一样也不能更改
    cout << "reference: " <<g << " " << G << endl;
    //对常量的引用
    const int &r1 = 10;
    const int &r2 = 2*r1;
    cout << "reference of constant: "<< r1 <<" " << r2 << endl;
    //对可变变量的引用
    double dval = 3.2;
    const double &v2 = dval;
    dval = 3.1;
    cout << "reference of variable: " <<dval << " " << v2 << endl;
    //v2 = 5.2; 允许定义可变变量的const引用 但不允许通过const引用来修改原可变变量的值。

    //const指针
    //指针不同于引用 指针是一个对象 所以可以定义const指针
    int var = 2;
    int *const p_var = &var;
    *p_var = 1;     //仍可通过指针来修改指定变量的值,因为定义的是const指针,不可修改的是所指向的地址——不变的是指针本身(指向地址)而不是指向的变量
    int var1 = 2;
    //p_var = &var1;  //报错 不能修改const指针p_var指向的地址
    //const指针的声明方法 (指针指向对象的类型) *const (指针名称) = 地址值   如:int *const p_var = &var;
    //对const量的指针定义方法:
    const double pi_ = 3.1415926;
    const double *const pip = &pi_;      // 定义const double类型的const指针
    cout << "const pointer: " << var <<' ' << *p_var <<" "<< pi_ <<" "<<*pip<< endl;

    //由上述可知 指针本身是一个常量 和 指针所指向的变量是一个常量 是相互独立的问题
    //把 指针本身是一个常量 用顶层const表示
    //把 指针指向的变量是一个常量 用底层const表示
    int i = 0;
    int *const pi = &i;         //指针本身是一个常量,是一个顶层const
    const int ci = 10;          //其本身值不能改变 是一个顶层const
    const int *p2 = &ci;        //允许改变指针的值,但其指向是一个常量 是一个底层const
    const int *const p3 = &ci;  //靠右的const为顶层const,靠左的const为底层const

    // ***************处理类型***************//

    //类型别名:typedef和using
    typedef double dbl;     //dbl是double的同义词
    dbl var_1 = 1.34;
    cout << "typedef of double: " << var_1 << endl;
    using dab = double;     //dab是double的同义词
    dab var_2 = 1.35;
    cout << "using of double " << var_2 << endl;
    
    // auto类型说明符  auto会自动计算结果类型
    int var_3 = 9;
    int var_4 = 2;
    double var_5 = 2.4;
    auto var_6 = var_3 + var_4;     // int + int  自动为int
    auto var_7 = var_4 + var_5;     // int + double 自动为double
    cout << "auto: " << var_6 << " " << var_7 << endl;

    // decltype: 希望用表达式的类型推断出要定义的变量类型,但是又不想用表达式的值来初始化变量。
    //decltype(var_3) var_8;          //用var_3的类型来定义var_8
    //decltype(f()) sum = x;          //用函数f的返回值类型来定义sum

    // 类型判断函数 typeid
    int i_;
    cout << typeid(i_).name() << endl;   //返回 i_ 说明类型是int

    //system("pause");
    return 0;
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值