Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
Light-City committed Mar 11, 2020
1 parent 5249baa commit 08e9683
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions basic_content/const/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)防止修改,起保护作用,增加程序健壮性

Expand All @@ -35,7 +39,6 @@ const定义常量从汇编的角度来看,只是给出了对应的内存地址
## 3.const对象默认为文件局部变量
<p><font style="color:red">注意:非const变量默认为extern。要使const变量能够在其他文件中访问,必须在文件中显式地指定它为extern。</font></p>
> 未被const修饰的变量在不同文件的访问
```c++
Expand Down Expand Up @@ -73,7 +76,6 @@ int main(){
```

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

## 4.定义常量

```c++
Expand Down Expand Up @@ -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指针的值不能修改。
Expand Down Expand Up @@ -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加在指针不同的位置有什么区别;
Expand Down

0 comments on commit 08e9683

Please sign in to comment.