C++中常量赋值是如何规定的

2025-03-07 01:58:34
推荐回答(1个)
回答1:

1、值替代
  C语言中预处理器用值代替名字:

#define BUFSIZE 100

这种方式在C++中依然适用,同时

  C++用const把值代替带进编译器领域:
  const bufsize = 100 ;或 const int bufsize = 100 ;
  同时还可以执行常量折叠:
  char buf[bufsize] ;
1.1 头文件里的const
  与使用#define一样,使用const必须把const定义放在头文件里。这样,通过包含头文件,可把const定义单独放在一个地方,并把她分配给一个编译单元。const默认为内部连接,即仅在const被定义过的文件里才是可见的,而在连接时不能被其他编译单元看到。
  比如说在Test.h中定义了,

const int nTestConst = 1000;

  在A.cpp中include"Test.h"
  同时在B.cpp中include"Test.h"
  不会出现,当没有定义为const时,因变量定义出现两次而出错的情形.
  当定义一个const常量时,必须赋一个值给它,除非用extern作了清楚的说明:

  extern const bufsize ;

  虽然上面的extern强制进行了存储空间分配,但C++编译器并不为const分配存储空间,相反它把这个定义保存在它的符号表里。当const被使用时,它在编译时会进行常量折叠。

1.2 const的安全性
  如果想要一个值保持不变,就应该使它成为一个常量(const)。
  1.3 集合
  const可以用于集合,但必须分配内存,意味着“不能改变的一块存储”。但其值在编译时不能被使用。
 

 const int i [] = {1,2,3,4};
  // float f [ i [3] ]; // Illegal

  2,指针
  当使用带有指针的const时,有两种选择:1、或者const修饰指针正指向的对象,2、const修饰存储在指针本身的地址。
  2.1 指向const的指针
  使用指针定义的技巧,正如任何复杂的定义一样,是在标识符的开始处读它并从里到外读。如果我们要使正指向的元素不发生改变,得写:

  const int * x;

  从标识符开始:“x 是一个指针,指向一个const int。”
  把const从一边移到另一边,结果一样。
  int const * x;
  2.2 cosnt指针
  是指针本身成为一个const指针,必须把const标明的部分放在*的右边,如:

 int d = 1;
  int * const x = &d;

  指针本身是const指针,编译器要求给它一个初始化值,这个值在指针寿命期间不变。然而要改变它所指向的值是可以的,可以写*x = 2。
  这些可以总结成这样一句话:
  以*为分界点,
  当const在*的左边时,实际物体值不变
  当const在*的右边时,指针不变,
  即,左物右指
  这样来记比较方便!!