From 08e9683b6091a09dee3f958658d7a5454ccf0d9a Mon Sep 17 00:00:00 2001 From: Light-City <455954986@qq.com> Date: Wed, 11 Mar 2020 13:03:08 +0800 Subject: [PATCH] update --- basic_content/const/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/basic_content/const/README.md b/basic_content/const/README.md index b1c64d6..61cad1d 100644 --- a/basic_content/const/README.md +++ b/basic_content/const/README.md @@ -18,7 +18,11 @@ const int a=100; (2)类型检查 -const常量与#define宏定义常量的区别:const常量具有类型,编译器可以进行安全检查;#define宏定义没有数据类型,只是简单的字符串替换,不能进行安全检查。 +const常量与#define宏定义常量的区别:~~**const常量具有类型,编译器可以进行安全检查;#define宏定义没有数据类型,只是简单的字符串替换,不能进行安全检查。**~~感谢两位大佬指出这里问题,见: + +> https://github.com/Light-City/CPlusPlusThings/issues/5 + +`const` 定义的变量只有类型为整数或枚举,且以常量表达式初始化时才能作为常量表达式。其他情况下它只是一个 `const` 限定的变量,不要将与常量混淆。 (3)防止修改,起保护作用,增加程序健壮性 @@ -35,7 +39,6 @@ const定义常量从汇编的角度来看,只是给出了对应的内存地址 ## 3.const对象默认为文件局部变量

注意:非const变量默认为extern。要使const变量能够在其他文件中访问,必须在文件中显式地指定它为extern。

- > 未被const修饰的变量在不同文件的访问 ```c++ @@ -73,7 +76,6 @@ int main(){ ```

小结:可以发现未被const修饰的变量不需要extern显示声明!而const常量需要显示声明extern,并且需要做初始化!因为常量在定义后就不能被修改,所以定义时必须初始化。

- ## 4.定义常量 ```c++ @@ -138,7 +140,6 @@ cout<<*ptr<小结:对于指向常量的指针,不能通过指针来修改对象的值。
也不能使用void`*`指针保存const对象的地址,必须使用const void`*`类型的指针保存const对象的地址。
允许把非const对象的地址赋值给const对象的指针,如果要修改指针所指向的对象值,必须通过其他方式修改,不能直接通过当前指针直接修改。

- (2)常指针 const指针必须进行初始化,且const指针的值不能修改。 @@ -257,7 +258,6 @@ void func(const A &a)。 据类型的参数不存在构造、析构的过程,而复制也非常快,“值传递”和“引用传递”的效率几乎相当。

小结:对于非内部数据类型的输入参数,应该将“值传递”的方式改为“const 引用传递”,目的是提高效率。例如将void func(A a) 改为void func(const A &a)。
对于内部数据类型的输入参数,不要将“值传递”的方式改为“const 引用传递”。否则既达不到提高效率的目的,又降低了函数的可理解性。例如void func(int x) 不应该改为void func(const int &x)。

- 以上解决了两个面试问题: (1)如果函数需要传入一个指针,是否需要为该指针加上const,把const加在指针不同的位置有什么区别;