zoukankan      html  css  js  c++  java
  • 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限定在了编译期常量

    摘录:

  • 相关阅读:
    Spring事务管理
    ssh三大框架整合
    SVN服务器安装教程
    springaop配置
    SVN学习笔记
    spring整合jdbc
    ubuntu 虚拟XP chm文件用不了
    Acegi的标签库authzauthorize
    android http 连接通信
    UltraISO(软碟通)制作安装Ubuntu
  • 原文地址:https://www.cnblogs.com/yy-1046741080/p/12321181.html
Copyright © 2011-2022 走看看