C到C++的升级
C++编译器对 const 常量的处理
- 当碰见
常量声明
时在符号表中放入常量 - 编译过程中若发现使用常量则直接以符号表中的值替换
- 编译过程中若发现对 const使用了 exter或者&操作符,则给对应的常量分配存储空间
注意:
- C++编译器虽然可能为 const 常量分配空间,但不会使用其存储空间中的值
- C语言中 const 变量是只读变量
- 有自己的存储空间
- C++中的 const 常量可能分配存储空间
- 当 const 常量为全局,并且需要在其它文件中使用
- 当使用&操作符取 const 常量的地址
案例代码:
C++中的 const小结
- C++中的 const常量类似于宏定义
- const int c= 5 <=> #define c 5
- C++中的 const 常量在与宏定义不同
- const常量是由编译器处理的,提供类型检查和作用城检查区
- 宏定义由预处理器处理,是单纯的文本替換
c++中const和宏定义的区别:
#include<stdio.h>
void f()
{
#define a 3
const int b = 4;
}
void g()
{
printf("a=%d \n",a);
//printf("b=%d \n",b);
}
int main(int argc,char *argv[])
{
f();
g();
printf("press enter to continue");
getchar();
return 0;
}
C++对struct类型的加强
- C语言的 struct 定义了一组变量的集合,C编译器并不认为这是一种新的类型
- C++中的 struct 是一个新类型的定义声明:
struct Student
{
const char* name;
int age;
};
Student s1;
Student s2;
代码 案例:
#include<stdio.h>
struct Student
{
const char* name;
int age;
};
int main(int argc,char *argv[])
{
Student s1 = {"zhang",30};
Student s2 = {"wang",27};
printf("press enter to continue");
getchar();
return 0;
}
C++中所有的变量和函数都必须有类型
C语言中的默认类型
在C++中是不合法的
问题:
1.函数 f 的返回值是什么类型,参数又是什么类?
2.函数 g 可以接受多少个参数?
思考:
int f();
与
int f(void);
的区别是什么?
在C语言中
int f();
表示返回值为int,接受任意参数的函数
int f(void);
表示返回值为int的无参函数
在C++中
- int f(); 和 int f(void) 具有相同的意义,都表示返回值为 int 的无参函数。
小结:
- C++以C语言为基础进行了加强C++更强调实用性,可以在任意的地方声明变量
- C++中的 register只是一个向后兼容的作用,C++编译器能够进行更好的变量优化
- C++中的 cons t是一个真正意义上的常量,而不是只读变量
- C++更加强调类型,任意的程序元素都必须显示指明类型