This commit is contained in:
Light-City 2020-03-11 13:03:08 +08:00
parent 5249baaeb9
commit 08e9683b60

View File

@ -18,7 +18,11 @@ const int a=100;
2类型检查
const常量与#define宏定义常量的区别const常量具有类型编译器可以进行安全检查#define宏定义没有数据类型只是简单的字符串替换不能进行安全检查。
const常量与#define宏定义常量的区别~~<u>**const常量具有类型编译器可以进行安全检查#define宏定义没有数据类型只是简单的字符串替换不能进行安全检查。**</u>~~感谢两位大佬指出这里问题,见:
> https://github.com/Light-City/CPlusPlusThings/issues/5
`const` 定义的变量只有类型为整数或枚举,且以常量表达式初始化时才能作为常量表达式。其他情况下它只是一个 `const` 限定的变量,不要将与常量混淆。
3防止修改起保护作用增加程序健壮性
@ -35,7 +39,6 @@ const定义常量从汇编的角度来看只是给出了对应的内存地址
## 3.const对象默认为文件局部变量
<p><font style="color:red">注意非const变量默认为extern。要使const变量能够在其他文件中访问必须在文件中显式地指定它为extern。</font></p>
> 未被const修饰的变量在不同文件的访问
```c++
@ -73,7 +76,6 @@ int main(){
```
<p><font style="color:red">小结可以发现未被const修饰的变量不需要extern显示声明而const常量需要显示声明extern并且需要做初始化因为常量在定义后就不能被修改所以定义时必须初始化。</font></p>
## 4.定义常量
```c++
@ -138,7 +140,6 @@ cout<<*ptr<<endl;
```
<p><font style="color:red">小结:对于指向常量的指针,不能通过指针来修改对象的值。<br/>也不能使用void`*`指针保存const对象的地址必须使用const void`*`类型的指针保存const对象的地址。<br/>允许把非const对象的地址赋值给const对象的指针如果要修改指针所指向的对象值必须通过其他方式修改不能直接通过当前指针直接修改。</font></p>
2常指针
const指针必须进行初始化且const指针的值不能修改。
@ -257,7 +258,6 @@ void func(const A &a)。
据类型的参数不存在构造、析构的过程,而复制也非常快,“值传递”和“引用传递”的效率几乎相当。
<p><font style="color:red">小结对于非内部数据类型的输入参数应该将“值传递”的方式改为“const 引用传递”目的是提高效率。例如将void func(A a) 改为void func(const A &a)。<br/>对于内部数据类型的输入参数不要将“值传递”的方式改为“const 引用传递”。否则既达不到提高效率的目的又降低了函数的可理解性。例如void func(int x) 不应该改为void func(const int &x)。</font></p>
以上解决了两个面试问题:
1如果函数需要传入一个指针是否需要为该指针加上const把const加在指针不同的位置有什么区别