精华内容
下载资源
问答
  • 常量和常量表达式

    千次阅读 2013-08-31 14:56:25
    常量和常量表达式  long型常量以L或者l结尾,有时候,如果一个整数太大无法用int表达,也被当做long型;  无符号常量以U或者u结尾,unsigned long型常量以UL或者ul结尾;  没有后缀的浮点数常量为double型;  ...

    常量和常量表达式

     long型常量以L或者l结尾,有时候,如果一个整数太大无法用int表达,也被当做long型;

     无符号常量以U或者u结尾,unsigned long型常量以UL或者ul结尾;

     没有后缀的浮点数常量为double型;

     有后缀F或者f的浮点数常量是float型,后缀L或者l表示long double型常量;

     八进制和十六进制的常量也可以使用LU后缀;

     可以使用八进制或者十六进制数值表示机器字符集中的数值量,从而组成转义字符。基本形式:

     八进制:'\ooo'  比如,'\013'就是十进制11,表示ASCII码中的纵向制表符

     十六进制:'\xhh'  比如,'\x7'就是十进制7,表示ASCII码中的响铃符

     字符常量'\0'表示值为0的字符,也就是空字符null。通常用'\0'的形式代替0,以强调某些表达式的字符属性,但其数字值为0

     常量表达式是仅仅包含常量的表达式,它在编译的时候进行求值,不是在运行时;

     '""为空字符串;

     编译时,可以将多个相邻的字符串常量连接在一起(ANSI C的新特性);

     存储字符串的物理存储单元数比括在双引号中的字符数多一个;

     不同枚举中的名字必须互不相同,同一枚举中不同的名字可以具有相同的值;

     枚举为建立常量值与名字之间的关联提供了一种便利的方式,相对于#define语句来说,枚举的优势在于常量值可以自动生成。

    展开全文
  • c++常量和常量表达式

    千次阅读 2019-08-03 18:49:31
    const,默认情况下仅在文件内有效 const int i(12); const引用:对常量的引用不能被用作修改它所绑定的对象 ...允许常量引用绑定到非常量的对象、字面值或表达式上 int i = 20; const int &ri(20); con...

    const,默认情况下仅在文件内有效

    const int i(12);

    const引用:对常量的引用不能被用作修改它所绑定的对象

    const int ci(5);

    const int &rci(ci);

    rci = 90;//错误 不能修改

     

    允许常量引用绑定到非常量的对象、字面值或表达式上

    int i = 20;

    const int &ri(20);

    const int &ri3(i + ri);

     

    常量引用仅对引用可参与的操作作出了限定,对于引用的对象本身未做限定

    int i(10);

    const int &c(i);

    i = 90;//i不是常量,可以改变值

    c = 20;//错误,c是一个常量引用,const限定了c为常量不能修改,i的修改与c的限定无关。

    cout << c << endl;//值为90

     

    //指针和const

    int iv(10);

    int iv1(23);

    const int * pci1(&iv);//指向常量的指针,限定了该指针的操作,pci1的值可以改变,pcil指向的值不能变

    pci1 = &iv1;

    iv = 30;

    int * const pci2(&iv);//常量指针,把指针本身定位常量,pci2的值不能改变,pci2指向的值可以改变

    *pci2 = 90;

     

    cout << *pci1 << endl;//23

    cout << *pci2 << endl;//90

     

    顶层和底层

    顶层:表示指针本身是个常量

    底层:指针所指的对象是常量

    小技巧:const int * p: const修饰的是*p,也就是*p不能变。

            int * const p: const修饰的是p,也就是p不能变。

     

     

    字面值和constexpr

    常量表达式:字面值是常量表达式,用常量表达式初始化的const对象也是常量表达式

    const int ci = 20;//ci是常量表达式

    const int cii = ci + 90;//cii是常量表达式

    int iv = 30;//iv不是常量表达式

     

    声明为constexpr的变量一定是常量,而且必须用常量表达式初始化

    constexpr int cif = 23;

     

    constexpr声明的指针,只对指针有效,与指针指向的对象无关

    constexpr int cvi(12);//必须定义到函数体外部才能被cip使用

    constexpr const int * cip(&cvi);

    cout << *cip << endl;

    展开全文
  • 如果我的代码使用依赖于不同包中定义的其他常量表达式常量表达式,那么这将如何影响?例如,假设我在相应的指定包中有以下类:package foo;public class Foo {public static final boolean CONDITION = false;...

    here所述,javac和其他Java编译器可能为条件为

    “Constant Expression”的if语句提供代码消除功能.

    如果我的代码使用依赖于不同包中定义的其他常量表达式的常量表达式,那么这将如何影响?

    例如,假设我在相应的指定包中有以下类:

    package foo;

    public class Foo {

    public static final boolean CONDITION = false;

    }

    package bar;

    import foo.Foo;

    public class Bar {

    public void test() {

    if (Foo.CONDITION) {

    System.out.println("This line of code could be eliminated.");

    } else {

    System.out.println("This line of code will be executed.");

    }

    }

    }

    显然,如果foo-package在运行时从外部jar文件加载,则编译器在技术上不能假设Foo.CONDITION将为false,并且不应该消除if-statement的真实分支.

    而如果Foo和Bar实际上在同一个软件包中,则真正的分支应该绝对被消除(如果编译器完全支持代码消除).

    不太确定如何最好地说出这个问题,但是:Foo如何“接近”需要在Bar中持续表达,以便在Bar中被认为是不变的?他们需要在同一个文件中吗?同样的包装?同一个jar文件?或者根本不重要(即编译器总是将Foo.CONDITION视为常量,并在编译时使用构建路径中找到的值)?

    展开全文
  • constexpr和常量表达式

    2019-08-19 23:17:00
    constexpr和常量表达式 常量表达式 常量表达式是指不会改变且在编译过程中就能计算出来的表达式。 字面值是常量表达式,用常量表达式初始化的const对象也是常量表达式。 一个对象或表达式是不是常量表达是由它的数据...

    constexpr和常量表达式

    常量表达式

    常量表达式是指不会改变且在编译过程中就能计算出来的表达式。
    字面值是常量表达式,用常量表达式初始化的const对象也是常量表达式。
    一个对象或表达式是不是常量表达是由它的数据类型和初始值共同决定。

    例:

    const int a = 10;//常量表达式
    const int b = a + 5;//常量表达式
    int c = 3;//不是常量表达式
    const int d = f();//不是常量表达式
    constexpr int *p = &c;//p是一个常量指针,指针p不可变
    const int *p1 = &c;//错误,p1需要指向一个常量
    

    说明:虽然c有字面值(常量表达式)初始化,但它自己并不是const的,也就是在程序运行时是可变的,因此不是常量表达式,d虽然是const的,但是由于它在程序运行时才能知道是多少,不是由常量表达式对其初始化,故也不是常量表达式。

    C++的标准规定,可以将变量声明为constexpr类型,这样在编译的时候编译器就会检查变量的值是否是一个常量表达式。

    constexpr函数:明天再记录

    展开全文
  • 常量表达式常量表达式的定义: 是指值不会改变并且在编译过程中就能得到计算结果的表达式。 常量表达式的种类: 字面值是常量表达式常量表达式初始化的const对象也是常量表达式 常量表达式举例:const int max_...
  • 常量表达式和运算符

    2021-01-01 20:54:05
    常量表达式和运算符 通过学习了常量和运算符后,我感觉这些代码的解释和我们以前学过的数学相像,比如常量和变量,这些都是数学中常用的名词,学习了这些新知识后我总结了以下知识点: JAVA中的常量 常量就是指在...
  • 常量表达式:表达式就是由常量组成的,这时如果计算结果发生溢出,编辑器是会有下划线提醒的。 int x = 2147483647 + 10; 非常量表达式:表达式由一个或者多个非常量组成的,这时发生溢出是不会提醒的,使用...
  • 定义 常量表达式(const expression)是指值不会改变并且在编译过程就能得到结果的表达式。...一个对象(或表达式)是不是常量表达式由它们的数据类型初始值共同决定,例: const int a = 20; //
  • 常量表达式

    万次阅读 2017-11-20 22:51:42
    字面值:是一个不能改变的值,如数字、字符、字符串等。单引号内的是字符字面值,双引号内的是字符串字面值。...字面量属于常量表达式,用常量表达式初始化的const对象也是常量表达式。 一个对象(或表达式)是不
  • constexpr和常量表达式 常量表达式(constexpression)是指值不会改变并且在编译过程就能够得到计算结果的表达式。显然,字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。后面将会提到,C++...
  • 常量表达式 常量表达式是指不会改变且在编译过程中就能得到计算结果的表达式。 int main() { const int value1 = 10; const int value2 = value1 + 1; return 0; } constexpr constexprconst很像,有如下区别 ...
  • constexpr与常量表达式、字面值类型、字面值常量类、枚举enum 目录 constexpr与常量表达式 字面值类型 字面值常量类 枚举enum constexpr与常量表达式 constexpr类型——constexpr变量 含义:声明为...
  • 到目前为止,我们碰到的所有的变量都不是常量变量。也就是说变量的值可以任意改变。例如: int x { 4 }; // initialize x with the value of 4 x = 5; // change value of x to 5 然而,有些时候定义一些不能改变...
  • 常量表达式(const expression)是指值不会改变并且在编译过程就能得到计算结果的表达式。... 一个对象(或者表达式)是不是常量表达式由它的数据类型初始值共同决定,例如: const int max_files = 20...
  • 1.常量表达式 const int max = 100; // 常量表达式 const int limit = max +1; // 常量表达式 const int size = getSize(); // 不是常量表达式,因为getSize()运行时才有值 2.constexpr 变量 constexpr 类型:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,233
精华内容 3,293
关键字:

常量和常量表达式