【C++基础】 --- C++ const

简介: 【C++基础】 --- C++ const

一、const基础知识(用法、定义、好处)

1、

const int a;
int const b;

两者意思一样,代表一个整形常数

const int *c;               //c是一个指向常整形数的指针(所指向的内存数据不能被修改,但是本身可以修改

int * const d;             //d 常指针(指针变量不能被修改,但是它所指向内存空间可以被修改)

const int * const e ;    //e一个指向常整形的常指针(指针和它所指向的内存空间,均不能被修改)

2、使用const的好处

1)指针做函数参数,可以有效的提高代码可读性,减少bug;

2)清楚的分清参数的输入和输出特性


二、c与C++对const整形常数的不同操作

int main()
{
  const int a = 10;
  int *p = (int*)&a; 
  printf("a = %d\n", a);
  *p = 11;
  printf("a = %d\n", a);
 
  return 0;
}

C中的输出结果是10 、11

C++中两次的输出结果都是10

 

解释:

C++编译器对const常量的处理

C++编译过程中若发现使用常量则直接以符号表中的值替换

编译过程中若发现对const使用了extern或者&操作符,则给对应的常量分配存储空间(兼容C)

结论:

C语言中的const变量

C语言中const变量是只读变量,有自己的存储空间

C++中的const常量

可能分配存储空间,也可能不分配存储空间

const常量为全局,并且需要在其它文件中使用

当使用&操作符取const常量的地址


三、C++中const与define的区别

C++中的const常量类似于宏定义

const int c = 5; ≈ #define c 5

C++中的const常量在与宏定义不同

const常量是由编译器处理的,提供类型检查和作用域检查

宏定义由预处理器处理,单纯的文本替换

void fun1()
{
    #define a 10
    const int b = 20;
    //#undef
}
 
void fun2()
{
    printf("a = %d\n", a);
    //printf("b = %d\n", b);
}
 
int main(int argc, char *argv[])
{
    fun1();
    fun2();
    return 0;
}

1、在func1定义a,在func2中能使用吗?

2、在func1中定义的b,在func2中能使用吗?

相关文章
|
6月前
|
C++
C++中的const指针与const引用
C++中的const指针与const引用
77 2
|
6月前
|
编译器 C++
C++中的内联函数与const限定词的使用
C++中的内联函数与const限定词的使用
39 1
|
5月前
|
编译器 C++
【C++】类和对象④(类的默认成员函数:取地址及const取地址重载 )
本文探讨了C++中类的成员函数,特别是取地址及const取地址操作符重载,通常无需重载,但展示了如何自定义以适应特定需求。接着讨论了构造函数的重要性,尤其是使用初始化列表来高效地初始化类的成员,包括对象成员、引用和const成员。初始化列表确保在对象创建时正确赋值,并遵循特定的执行顺序。
|
5月前
|
编译器 C++
【C++】:const成员,取地址及const取地址操作符重载
【C++】:const成员,取地址及const取地址操作符重载
43 0
|
6月前
|
编译器 C语言 C++
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)(下)
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)
25 1
|
6月前
|
编译器 C++
【C++】类与对象(运算符重载、const成员、取地址重载)
【C++】类与对象(运算符重载、const成员、取地址重载)
46 2
|
6月前
|
编译器 C++
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
|
6月前
|
编译器 C语言 C++
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)(中)
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)
26 0
|
6月前
|
编译器 C语言 C++
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)(上)
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)
22 0
|
6月前
|
存储 编译器 C++
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载