• c++学习笔记2--constexpr,类型别名,auto


    constexpr:修饰常量表达式,约定修饰对象不仅为常量,而且在编译阶段就能得到值。

    与const不同的是,constexpr约束的是当事人,就是说,constexpr int *a=1;这样的语句,a指针本身是const,并且右边也足够简单,而const int*a;这样的语句,则约定了a指向对象是const,这是不同点。constexpr直接限定为顶层const。

    类型别名:传统的是typedef,

    typedef double a;
    a b = 1.1;

    类似这样的代码么就是说a是一个double类型

    c11新标准有新的类型别名定义:

    using a = double;
    

      关于指针的类型别名有个需要注意的点:

    typedef char *a;
    const a cstr = 0 ;//cstr是char的常量指针
    const a *p ; //p是指向char常量指针的 指针

    如果直接字面替代理解typedef会得到错误的理解。

     例如带入以后得到这样的代码:const char *a = 0;  这是底层const,这种理解是错误的。

    auto类型:c11新标准引入的类型。由编译器帮助我们去判断类型。

    类似auto a = 1;则a是int型。

    需要注意的是:

    const int *a = NULL;
    auto b = a; 
    const int c = 1;
    auto d = c;

    b结果是一个指向int常量的指针,d只是普通的int型。

    编译器会放弃顶层const,而底层的const则会保留下来。

    类似于:

    auto a = 1,b=2;

    这样的代码,必须保证a,和b是同一种类型。

    否则会报错。

    decltype 类型指示符

    c++11新标准的另一种指示符就是decltype类型指示符:

    decltype(f()) sum = x;

    它根据f()返回值限定类型,他处理顶层和底层const与auto不同,const会被保留,即使是顶层。

    如:

    const int i = 0;

    decltype(i) a = 0;

    a 也是const int.

    解引用和()表达式最后也会返回引用。

  • 相关阅读:
    System.currentTimeMillis();
    Spark Core源代码分析: Spark任务模型
    CocoaPods on Xcode 6 and Yosemite
    leetcode第一刷_Binary Tree Inorder Traversal
    struts2讲义----建立一个struts2工程
    Java实现 蓝桥杯VIP 算法提高 班级排名
    Java实现 蓝桥杯VIP 算法提高 种树
    Java实现 蓝桥杯VIP 算法提高 种树
    Java实现 蓝桥杯VIP 算法提高 种树
    Java实现 蓝桥杯VIP 算法提高 种树
  • 原文地址:https://www.cnblogs.com/wuweixin/p/5236205.html
Copyright © 2020-2023  润新知