update
This commit is contained in:
parent
5249baaeb9
commit
08e9683b60
@ -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加在指针不同的位置有什么区别;
|
||||
|
Loading…
Reference in New Issue
Block a user