C++对C语言的一些增强

"实用性"增强

C语言中的变量都必须在作用域开始时定义.
C++中更强调语言的"实用性",所有变量都可以在需要使用时定义.
#include
int main()
{
int i=0;
cout<<"i = "<<i<<endl;
int k=4;
cout<<"k = "<<k<<endl;
return 0;

变量检测增强

在c语言中,重复定义多个同名的全局变量是合法的.
在c++中,不允许定义多个同名的全局变量.
c语言中多个同名的全局变量最终都会被链接到全局数据区的同一个地址当中.
//此代码错误,无法执行
#include
int g_var;
int g_var = 1;
//c++直接拒绝这种二义性的做法
int main()
{
printf(“g_var=%d\n”,g_var);
return 0;
}

struct类型的增强

C语言的struct定义了一组变量的集合,c编译器并不认为这是一种新的类型.
C++中的struct是一种新类型的定义声明
#include
struct Student
{
char name[64];
int age;
};
int main()
{
//Student是一种新的数据类型
Student s1={“wang”,1};
Student s2={“wang2”,2};
return 0;
}

变量和函数的加强

c++中所有的变量和函数都必须有类型.
c语言中的默认类型在c++中是不合法的.
//c语言的代码
f(i)
{
printf(“i = %d\n”,i);
}
g()
{
return 5;
}
int main()
{
f(10);
printf(“g() = %d\n”,g(1,2,3,4));
getchar();
return 0;
}

c++中所有的变量和函数都必须有类型.

变量和函数的加强总结
在c语言中

int f():表示返回值为int,接受任意参数的函数,
int f(void):表示返回值为int的无参函数
在c++中

int f() 与 int f(void)具有相同的意义,都是表示返回值为int的无参函数
所以在c++中,更加强调类型,任意的程序元素都必须显示指明类型

新增bool类型

c++在c语言基本类型上增加了布尔类型
c++中的bool类型理论上c++的bool类型只占用一个字节,如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现,
true表示真值.编译器内部用1表示, false表示非真值,编译器内部用0表示.
bool类型只有true(非0)和false(0)两个值.
#include
using namespace std;
int main())
{
int a;
bool b=true;

三⽬运算符功能增强

(a<b?a:b)=30;
c语言中表达式不能作为左值,因此,c++加强了三目运算符,表达式返回的值是变量的本身,也就是说,执行完(a<b?a:b)时,c++编译器返回了b变量,返回了变量本身,所以执行三目运算符后,接下来执行的是b=30;,因此可以通过编译运行.而c语言中的三目运算符返回的是变量的值,也就是b的值20

const加强

const是常量的标识符

c语言的"冒牌货":

#include<stdio.h>
int main()
{
const int a=10;
int *p=&a;
printf(“a = %d\n”,a);
*p=11;
printf(“a = %d\n”,a);
return 0;
}

从上面的例子可以看出,c语言中虽然使用const定义了变量,但通过间接赋值的方式,可以改变数值大小.所以在c语言中,const定义的变量,不是真正意义的常量,仍然可以改变数值的大小

但是在c++中,const是一个真正的常量,通过任何方式都不可以改变,const修饰的变量在常量编译期间,就已经确定下来了

const变量的总结:
C语言中const变量是只读变量,有自己的存储空间
C++中的const常量:

  1. 可能分配存储空间,也可能不分配存储空间
  2. 当const常量为全局,并且需要在其它文件中使用,会分配存储空间
  3. 当使用&操作符,取const常量的地址时,会分配存储空间
  4. 当const int &a = 10; const修饰引用时,也会分配存储空间

枚举变量的加强

c 语言中枚举本质就是整型,枚举变量可以用任意整型赋值.
c++中枚举变量, 只能用被枚举出来的元素初始化.
#include
using namespace std;
enum season {SPR,SUM,AUT,WIN};
int main()
{
enum season s=SPR;
//s = 0;//error,但是C语⾔可以通过
s=SUM;
cout<<"s = "<<s<<endl;//1
return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44576259/article/details/120475884