typedef const constexpr学习笔记

typedef

作用:定义别名
用法:typedef oldName newName;

定义四种类型的不同表示:

int:typedef int INTEGER;
数组:typedef int a20[20] ;(注意int [20]是单独的一个类型)
结构体:typedef struct stu{
char name[20];
int age;
char sex;
} STU;
指针:typedef int (*p)[20] ;

和 #define 的区别:

①typedef不能对类型名进行扩展 unsigned INTERGE n; //这是错的
②在连续定义几个变量的时候,typedef 能够保证定义的所有变量均为同一类型


const

● 变量——定义为常量,不分配空间,存储在常量区
● 函数的参数——在函数体内不可被修改,本质上仍为变量
● 函数的返回值——①指针,指针内容不能被修改 ②引用,函数体不能作为左值 ③变量,没有意义,返回后就挂掉
● 类内——①数据成员,在对象内是常量 ②成员函数 函数名前:修饰函数返回值,函数名后:常成员函数,函数不能修改对象的成员
● 类外——①对象,对象不能被更新
● 指针——4种情况,注释掉的代码是出错的语句,代表值不可被修改

    //这两种方法const都是修饰指针指向的值,但能不能修改取决于a是不是const
    int a = 1;
    const int* pa = &a;
    //int const* pa = &a;
    cout << a << endl;
    cout << pa << endl;
    cout << ++a << endl;
    cout << ++pa << endl;
    //cout << ++*pa << endl;

    //常量
    const int a = 1;
    const int* pa = &a;
    cout << a << endl;
    cout << pa << endl;
    //cout << ++a << endl;
    //cout << ++*pa << endl;

    //常指针
    int a = 1;
    int* const pa = &a;
    cout << a << endl;
    cout << pa << endl;
    cout << ++a << endl;
    //cout << ++pa << endl;

    //常指针常变量
    const int a = 1;
    const int * const pa = &a;
    cout << a << endl;
    cout << pa << endl;
    //cout << ++a << endl;
    //cout << ++pa << endl;
优点

● 辅助检查,让程序员和编译器知道这是常量,不可被修改,多一重检查,同时也避免了二义性
● C++定义一个常量后,不会为它分配空间,而是写进常量区,这使其成为编译期间的常量,在程序运行时没有了读写内存的操作,提高了程序效率和节省了空间(比 define 的优势)
● 为重载提供了参考,const 对象调用 const 方法,非const 对象调用非 const 方法
● 与 constexpr 的区别:在大部分场景中两者可以混用,但在某些场景,必须使用 constexpr,比如初始化列表必须只能用常量

using namespace std;
constexpr int sqr1(int arg){
    return arg*arg;
}
const int sqr2(int arg){
    return arg*arg;
}
int main()
{
    array<int,sqr1(10)> mylist1; //可以,因为sqr1时constexpr函数
    array<int,sqr2(10)> mylist1; //不可以,因为sqr2不是constexpr函数
    return 0;
}

const 可以被间接修改,拥有二义性,表达“只读”语义场景用 const,表达“常量”语义场景用 constexpr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值