精华内容
下载资源
问答
  • 常量表达式是指什么
    2021-07-28 17:44:08

    常量表达式是指值不会改变并且在编译过程中就能得到计算结果的表达式

    问:

    int staff_size = 27;			
    const int sz = get_size();
    

    是不是常量表达式?

    答:

    int staff_size = 27;			//staff_size 不是常量表达式
    const int sz = get_size();		//sz 不是常量表达式
    

    staff_size 的数据类型是 int 而不是 const int,是可以改变的,而且 get_size() 的值直到运行时才能获取到。

    更多相关内容
  • 常量表达式概念与用处

    千次阅读 多人点赞 2017-12-30 21:13:13
    1)什么常量表达式?  在编译期间进行求值的表达式。  1、字面值常量是常量表达式;如123,‘a’,3.14等  2、用常量表达式初始化的const对象也是常量表达式。如int const a=5;语句中a就是常量表达式 2)...
    1)什么叫常量表达式?

            在编译期间进行求值的表达式。

            1、字面值常量是常量表达式; 如123,‘a’,3.14等
            2、跟字面值常量相关的一些表达式; 如123+3.14,2<<2等
            3、在 C++中用常量表达式初始化的const对象也是常量表达式,并且也是C++推荐的使用方式,而C语言不是。 如int const a=5;语句中a就是常量表达式

    2)什么地方会用到常量表达式?

            就目前所知道的有三个,后面如果发现再新增。
            1、静态存储变量需用常量表达式初始化;
                  ps:C语言静态变量初始化中,可以把可执行文件想要初始化的值放在变量将会使用的位置, 当可执行文件载入到内存时,这个已经保存了正确初始值的位置将赋值给那个变量,因此必须使用常量表达式初始化。而C++中静态变量是动态分配的,即在程序运行时分配内存的,因此可以用变量对其进行初始化。
           
            2、case标签必须具有唯一的值,所以必须用常量表达式;
            
            3、定义一个数组,数组长度必须在编译时确定,必须为一个常量表达式
                  ps:为了便于维护,常使用#define为数值定义一个符号,如#define SIZE 50       int a[SIZE];
                          有些编译器允许声明动态数组,即用变量作为数组的长度,但此时不能对其进行初始化,即int a=5;int b[a];√   而int b[a]={1,2,3};×
    展开全文
  • C++ 常量表达式 常量值是不会更改的值。C + + 提供了两个关键字,它们使你能够表达不打算修改对象的意图,还可让你实现该意图。 C++ 需要常量表达式(计算结果为常量的表达式)以便声明: 数组边界 case 语句中...
  • 见§15.28常量表达式的规格常数表达式1..这的是§4.12.4最后变量它将“常量变量”定义为:我们称一个变量为原始类型或类型字符串,它是最终变量,并使用编译时常量表达式(§15.28)初始化为常...

    4d6cc336c9e9561e61e54a5d96a27976.png

    万千封印

    我知道编译器需要在编译时知道表达式才能编译一个开关,但是为什么foo.ba_常数不是呢?虽然从字段初始化后执行的任何代码的角度来看,它们都是常量,但它们不是编译时间常数在JLS所要求的意义上;见§15.28常量表达式的规格常数表达式1..这指的是§4.12.4最后变量它将“常量变量”定义为:我们称一个变量为原始类型或类型字符串,它是最终变量,并使用编译时常量表达式(§15.28)初始化为常量变量。变量是否为常量变量可能涉及类初始化(§12.4.1)、二进制兼容性(§13.1,§13.4.9)和确定赋值(§16)。在您的示例中,foo.ba*变量没有初始化器,因此不限定为“常量变量”。修复很简单;将foo.ba*变量声明更改为具有编译时常量表达式的初始化器。在其他示例中(初始化器已经是编译时常量表达式),将变量声明为final可能是我们需要的。可以将代码更改为使用enum而不是int常量,但这又带来了几个不同的限制:你,你们必包括default即使你有case的每一个已知值enum;见为什么打开枚举的开关是必需的?这个case标签必须是显式的enum值,而不是计算为enum价值。1-常量表达限制可概括如下。常量表达式a)可以使用原语类型和String只有,b)允许文字的初等(除了null)和常量变量,c)允许常量表达式(可能括号为子表达式),d)允许运算符(赋值运算符除外),++, --或instanceof,和e)允许将类型转换为原始类型或String只有。注意,这不包括任何形式的方法或lambda调用,new, .class. .length或数组订阅。此外,数组值的任何使用,enum值、原始包装类型的值、装箱和取消装箱都被排除在外。

    展开全文
  • 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;

    展开全文
  • 常量表达式函数(constexpr function)是能用于常量表达式的函数。其定义的方法和其他函数差不多,但主要满足一下规则: 1. 函数返回类型是字面值类型 2. 函数参数是字面值类型 3. 函数体中有且只有一条return语句 ...
  • 常量表达式(const expression):值不会改变并且在编译阶段过程就能得到计算结果的表达式。 以下两种是常量表达式: const int maxSize = 10; const int limit = maxSize + 1; 以下两种不是常量表达式: int ...
  • 常量表达式函数 1. const 在 C++11 之前只有 const 关键字,从功能上来说这个关键字有双重语义:变量只读,修饰常量 eg: void func(const int num) { const int count = 24; int array[num]; // error,num是一...
  • constexpr和常量表达式

    千次阅读 2017-11-13 10:59:22
    常量表达式(const expression)是值不会改变并且在编译过程就能得到计算结果的表达式。显然,字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。 const int a = 3;//a是常量表达式 const int ...
  • 常量表达式和constexpr

    2021-06-30 11:49:49
    1、常量表达式值不会改变并且在编译过程就能得到计算结果的表达式,如下: const int max_i= 5; //max_i 是常量表达式 int max_i = 5 //max_i不是常量表达式 const int max_i = get_size(); //max_i不是常量...
  • 常量表达式函数

    2019-07-13 11:06:47
    我们可以在函数返回类型前加入关键字constexpr来使其成为常量表达式函数,但并非所有的函数都有资格成为常量表达式函数。事实上,常量表达式函数的要求非常严格,总结如下: 函数体只有单一的return返回语句。 ...
  • 所谓常量表达式的就是由多个(≥1)常量组成的表达式。换句话说,如果表达式中的成员都是常量,那么该表达式就是一个常量表达式。这也意味着,常量表达式一旦确定,其值将无法修改。 实际开发中,我们经常会用到...
  • 常量表达式(constexpression)是不会改变并且在编译过程就能得到计算结果的表达式。显然,字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。后面将会提到,C++语言中有几种情况下是要用到常量...
  • java中常量表达式

    千次阅读 2020-03-01 18:48:32
    1.复合数据类型—抽象数据类型,用户自定义的数据类型 复合数据类型包括:class类、interface接口、数组。...final常量就是在程序执行期间其值不能发生变化的数据【一旦赋值则值不变】,常量是固定的。如整型...
  • 常量表达式值不会改变且在编译过程中就能够得到计算结果的表达式,能在编译时求值的表达式。 例1: #include &lt;iostream&gt; using namespace std; int main() { const int a1 = 10; // a1是...
  • 常量表达式

    万次阅读 2017-11-20 22:51:42
    常量表达式(const experssion):是(1)值不会改变 并且 (2)在编译过程就能得到计算结果的表达式。字面量属于常量表达式,用常量表达式初始化的const对象也是常量表达式。 一个对象(或表达式)是不
  • 所谓常量表达式的就是由多个(≥1)常量 组成的表达式。 如果表达式中的成员都是常量,那么该表达式就是一个常量表达式常量表达式一旦确定,其值将无法修改。 // 1) int url[10];//正确 // 2) int url[6 + ...
  • 常量表达式和运算符

    2021-01-01 20:54:05
    常量表达式和运算符 通过学习了常量和运算符后,我感觉这些代码的解释和我们以前学过的数学相像,比如常量和变量,这些都是数学中常用的名词,学习了这些新知识后我总结了以下知识点: JAVA中的常量 常量就是在...
  • 又来更新了,今天带来的是nullptr空指针常量、constexpr(常量表达式)C++的两个用法。Result result_fun =nullptr;constexprstatic uint32_t try_times = 100;这是两个在工作中常用的C++操作,但是你知道nullptr和...
  • 1.常量表达式 const int max = 100; // 常量表达式 const int limit = max +1; // 常量表达式 const int size = getSize(); // 不是常量表达式,因为getSize()运行时才有值 2.constexpr 变量 constexpr 类型:...
  • 常量表达式值不会改变并且在编译过程中就能得到计算结果的表达式,字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式 const int max = 20;//常量表达式 const int limit = max + 1;//常量...
  • c++ 常量表达式

    千次阅读 2016-05-13 13:20:50
    常量表达式指这种表达式能够在编译时刻被计算。 这种表达式,能被用到non-type模板参数,array sizes, 和其他需要const expression的地方。 int n = 1; std::array a1; // error, n is not a constant expressi
  • C++ 常量表达式 constexpr

    千次阅读 2022-03-28 21:34:33
    声明为constexpr的变量一定是常量,且必须用常量表达式初始化。 constexpr int num1 = 20; 20是常量表达式 constexpr int num2 = num1 + 1; num1 + 1是常量表达式 constexpr int num3 = size(); 只有 size 是个...
  • 1、空指针常量nullptr · 为了解决函数重载是传入NULL(0)的二义性,C++11引入了关键字nullptr充当空指针常量。 · nullptr的类型是nullptr_t: (1) 可以隐式转换为任意类型的指针或者指向任何成员。 (2) 不能...
  • C++ Primer笔记(2.4.4)——constexpr和.../* 常量表达式(const expression)是值不会改变而且在编译过程中就能得到计算结果的表达式 */ /* 显然,字面值属于常量表达式,用常量表达式初始化的const对象也是常量表
  • 常量表达式值不会改变并且在编译的过程中就能得到结果的表达式。显然,字面值属于常量表达式.... 然后书上关于字面值得解释是这样的: 字面值类型一般比较简单,值也显而易见,容易得到,就把他们称为“字面值...
  • 所谓常量表达式的就是由多个(≥1)常量组成的表达式。换句话说,如果表达式中的成员都是常量,那么该表达式就是一个常量表达式。这也意味着,常量表达式一旦确定,其值将无法修改。实际开发中,我们经常会用到...
  • 常量的声明 //圆周率是永恒不变的 const pi float32 = 3.14 变量的声明 //半径是实时变化的 var radius int 表达式常量变量使用运算符连接起来的式子 //面积计算的表达式 var area = pi*radius*radius ...
  • 常量表达式(constexpr)

    2019-05-21 19:12:00
    那么为什么要用常量表达式呢,用常量表达式会有什么好处:  1.允许一些计算只在编译时进行一次,而不是每次程序运行时;  2.编译器可以进行尺度更大的优化;  3.可以用在需求编译期间常量的上下文,例如数组...
  • 常量表达式值不会改变,在编译过程中就能得到计算结果的表达式。使用constexpr可以修饰变量、函数,为了方便总结和归纳,还定义了一类名为字面值类型的数据类型。使用constexpr可以极大优化我们的代码,它的用法...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 114,252
精华内容 45,700
热门标签
关键字:

常量表达式是指什么

友情链接: kaiguandysjrj.zip