美文网首页
C++数据类型(四)const常量

C++数据类型(四)const常量

作者: 山羊歌的演唱会 | 来源:发表于2018-06-05 18:35 被阅读0次

const常量

const常量:值无法被改变的变量

关于const的一些规则

//创建之后必须初始化
    const int bufSize = 1024;
    const int a = get_a();
    const int b;    //错误,没有初始化
    bufSize = 1024; //错误,常量不能赋值

const的引用

  • 与可变变量的引用不同的是,对常量的引用,不能用作修改其所绑定的常量。
  • 初始化常量的引用时允许用表达式作为初始值,但左右两边类型相同,但变量不行
const int bufSize = 1024;
const int &a = 512; //错误,不能修改绑定的常量的值
const int &b = bufSize * 3; //正确
int &c = bufSize * 3;     //错误,非常量引用必须为左值

至于最后一条语句:使用表达式对变量引用报错,解释如下:
试想如下语句:

double d = 3.14;
const int &rd = d;

对于这种引用,编译器工作如下:

double d = 3.14;
int temp = d;
const int &rd = temp;

rd只是绑定了一个临时变量temp,如果rd不是常量是变量呢?那么就允许对rd赋值,但是对rd赋值改变的是临时变量的值,之所以有变量引用,无非就是想通过引用改变绑定变量的值,如著名交换函数swap(),但是对于出现中间临时变量的这种情况,无法达到上述要求,那么引用也无任何意义,所以,编译器对于变量引用使用表达式初始化报错。

指针和const
与常量的引用类似,也存在指向常量的指针,同样也不能通过指针改变常量的值。

const int a = 4;
int *b = &a;
  • const指针
    与引用不同,指针是作为对象出现的,允许把指针作为常量,即常量指针。同样,常量指针必须初始化,一旦初始化成功,不能修改,指针常量的定义如下:
#include<iostream>
using namespace std;
int main() {
    int bufSize = 1024;
    int bufSize2 = 512;
    //定义一个常量指针
    int *const rbuf = &bufSize;
    //rbuf = &bufSize2; //错误:表达式必须是可修改的左值
    cout << *rbuf << endl;
    bufSize = 2048;
    cout << *rbuf << endl;
    system("pause");
    return 0;
}
//输出结果
1024
2048

关于常量的引用或者指向常量的指针,一直搞不明白有什么用,既然不能那个改变,为什么还可以引用或者使用指针呢?

constexpr和常量表达式

常量表达式指不会改变而且在编译过程中就能计算出结果的表达式
字面值属于常量表达式,用常量表达式初始化的常量也是常量表达式。

const int num = 20;             //num是常量表达式
const int number = num + 1;     //number也是常量表达式
int a = 3;                      //a不是常量表达式
const int size = size();        //size不是常量表达式

C++11新标准:
允许将变量声明为constexpr类型,编译器验证变量是否是一个常量表达式

constexpr int num = 20;             //num是常量表达式
constexpr int number = num + 1;     //number也是常量表达式
constxpr int size = size();         //size不一定常量表达式,size()是constexpr函数时,语句正确

同样的,constexpr对于指针同样有效,相当于声明了一个常量指针

const int *p = nullptr;            //p是指向整型常量的指针
constexpr int *q = nullptr;       //q是常量指针

相关文章

  • [C++之旅] 5 const的使用

    [C++之旅] 5 const的使用 const与基本数据类型 其中a为int类型的变量,b为常量吧,不可修改 c...

  • C++数据类型(四)const常量

    const常量 const常量:值无法被改变的变量 关于const的一些规则 const的引用 与可变变量的引用不...

  • const常量与define宏定义的区别

    在C++ 程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。以下是const和define...

  • C#常量

    定义常量:const 数据类型 常量名 = 值;常量名通常为大写

  • C++中的内联函数

    1、常量与宏回顾 C++中的const常量可以替代宏常数定义,如: const int A = 3; <===>...

  • C++程序设计学习笔记:1 从C走进C++ 关键字const和常

    1 定义常量 关键字const,用于定义常量。例如: 学了 C++ 之后,应该多用const,少用 define。...

  • const和#define

    (1)const和#define都可以定义常量,但是const用途更广。 (2)const 常量有数据类型,而宏常...

  • 常应用问题

    C++ const 常指针:const int* ptr;const 修饰int*,ptr指向整形常量,ptr指向...

  • const 和 #define区别对待

    const和#define都可以用来定义常量 const:用来定义一个常量, 其实在 C++中,const 修饰的...

  • const汇总

    const汇总 1.c语言中的const 2.const修饰基本数据类型 表示常量,在使用这些常量的时候,只要不改...

网友评论

      本文标题:C++数据类型(四)const常量

      本文链接:https://www.haomeiwen.com/subject/yalmsftx.html