一、namespace命名空间
1 C++命名空间基本常识
首先是头文件的引用问题,C++中引用头文件不使用后缀“.h”,目的是为了与C语言进行区分。
1)当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;
2)当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。
2 由于namespace的概念
使用C++标准程序库的任何标识符时,可以有三种选择:
1)直接指定标识符。例如std::ostream而不是ostream。
2)使用using关键字。 using std::cout; using std::endl; using std::cin; 以上程序可以写成 cout << std::hex << 3.4 << endl;
3)最方便的就是使用using namespace std;
3 C++的开头引用举例
#include "iostream"
using namespace std;
二、“实用性”增加
1 C语言中的变量都必须在作用域开始的位置定义!!
int i = 0;
int k;
printf("abc");
2 C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义。
int i = 0;
printf("abc");
int k;
system("pause");
三、register关键字增强
之所以使用register关键字,是为了请求编译器让变量直接放在寄存器里面,使运行速度变快。
1 C语言中
1)无法取得register变量地址
2)C语言编译器不会对代码进行优化
2 C++中
1)可以取得register变量的地址
2)不使用register也可能做优化,即使不使用register,但当出现多次调用,比如for(i=0;i<1000;i++)之类重复使用到变量i的语句时,C++编译器自动将变量i设置为register以加快速度。
四、变量检测增强
1 C语言中
重复定义多个同名的全局变量是合法的,C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上。
int g_var;
int g_var = 1;
2 C++中
在C++中,不允许定义多个同名的全局变量。
五、struct类型加强
1 C语言中
C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型。
struct Student
{
char name[100];
int age;
};
int main(int argc, char *argv[])
{
struct Student s1={“huang”,23};
return 0;
}
2 C++中
C++中的struct是一个新类型的定义声明,且可以加访问权限。
struct Student
{
public:
char name[100];
int age;
};
int main(int argc, char *argv[])
{
Student s1={“huang”,23};
return 0;
}
六、C++中所有的变量和函数都必须有类型
1 C语言中
1)C语言中的默认类型在C++中是不合法的
h()
{
return 0;
}
2)int f();表示返回值为int,接受任意参数的函数
3)int f(void);表示返回值为int的无参函数
2 C++中
1)int f( );和int f(void)具有相同的意义,都表示返回值为int的无参函数
2)C++更加强调类型,任意的程序元素都必须显示指明类型
七、新增Bool类型关键字
1 C++中的布尔类型
1) C++在C语言的基本类型系统之上增加了bool,即C语言中无Bool
2) C++中的bool可取的值只有true和false
3) 理论上bool只占用一个字节,如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现
补充:
1)true代表真值,编译器内部用1来表示;false代表非真值,编译器内部用0来表示。
2)bool类型只有true(非0)和false(0)两个值。
3)C++编译器会在赋值时将非0值转换为true,0值转换为false
八、三目运算符功能增强 (表达式?变量1:变量2)
1 C语言中
1) C语言返回变量的值
2) 不能作为左值使用
2 C++中
1) C++中的三目运算符可直接返回变量本身;
2)可以出现在程序的任何地方