• C++ const和constexpr


    const expression , 常量表达式 , 在《C++ Primer》的定义:值不会改变并且在编译过程就能得到计算结果的表达式。   它要求两点:值不会改变,编译过程得到结果。 因此不是所有的const常量都是常量表达式。

    1 const int max_files=20;  // YES
    2 const int limit = max_files + 1;   //YES
    3 const int sz = get_size();  // NO ,函数必须运行后才能得到结果(不考虑constexpr函数) ;  是常量,但是不是常量表达式

    因此,我们引出constexpr关键字,来验证是否为一个const expression。

    1 constexpr int mf = 20;
    2 constexpr int limit = mf + 1;
    3 constexpr int sz = size () ;   // 当size()为constexpr函数时成立;

    constexpr修饰变量,只能用字面值类型进行赋值(普通算术类型,指针,引用)。

    尽管引用和指针都能定义成constexpr,但是初始值严格设置为nullptr,或者为某个固定地址(固定地址的含义:堆内存地址,常量区等,不是位于栈内存)。

    constexpr如果修饰指针,那么表示常量指针,而不是指指针指向的内容。

    1 const int *p=nullptr ;
    2 constexpr int *q = nullptr ; // 指向常量的常量指针
    3 
    4 int j=0;
    5 constexpr int i = 42;
    6 constexpr const int *p=&i; // 常量指针+指针常量

    总结:对于修饰Object来说

    • const并未区分出编译期常量和运行期常量。
    • constexpr限定在了编译期常量

    摘录:

  • 相关阅读:
    Windows下安装并设置Redis
    Android平台相机接口的应用
    Struts(十五):主题
    Struts(十四):通用标签-form表单
    Struts(十三):通用标签
    Struts(十二):异常处理:exception-mapping元素
    Struts(十一):OGNL表达式(二)
    Struts(十):OGNL表达式(一)
    A*算法
    Centos:如何查找安装的jdk的目录
  • 原文地址:https://www.cnblogs.com/yy-1046741080/p/12321181.html
Copyright © 2020-2023  润新知