[C++对C语言的扩展二]

本文对比了C++与C语言在语法、变量类型、const使用、结构体、布尔类型、三目运算符以及const在两者中的不同处理,强调C++的类型安全性和严格性。
摘要由CSDN通过智能技术生成

1.C++语法检验增强

1.1全局变量检测增强

int a=10;
int a;

int main()
{
	cout << a << endl;
	return 0;
}

此代码在C++中编译失败,但在C语言中编译通过。

1.2C++中的所有变量和函数都必须有类型

以上代码可以在C语言中编译通过,C++、编译器无法编译通过。

1.3更严格的类型转换

在C++中不同类型的变量是不能直接赋值的,需要相应的强制类型转换。

typedef enum Color { red, green, yellow } color;

int main()
{
	color apple = red;
	apple = 10;
	return 0;
}

以上代码能在C语言中编译,不能在C++中编译通过。

1.4struct类型强化

C语言中定义结构体变量要加上struct关键字,而C++不需要。C语言中的结构体只能定义成员变量不能定义成员函数;而C++两者都可以定义。

struct Student 
{
	int age;
	string mName;
	void setName(string name)
	{
		mName = name;
	}
};

int main()
{
	Student stu;  //C++在定义结构体变量时,可以不加struct关键字
	return 0;
}

1.5新增bool类型关键字

标准C++的bool类型有两种内建的常量true(1)和false(0)表述对与错,都只占一个字节。给bool类型赋值时,非零值会转换为true而0零值会转化为false。

1.6三目运算符功能增强

C语言中三目运算符返回值为数据值,为右值,不能进行赋值操作

C++的三目运算符返回值之间引用变量本身,为左值,不能进行赋值操作

int main()
{
	int a = 10;
	int b = 20;
	cout << (a > b ? a : b)<<endl;
    a > b ? a : b=100;     //b=100 而C语言中不能被赋值
	return 0;
}

2.C/C++中的const

const是一个限定符,用来限定一个变量不允许改变,它将一个对象转化为一个变量。

2.1C语言中的const

(1)C语言中使用const定义a,a会被分配内存空间,本质上是一个可读变量,而不是常量。

const int a = 10;  //文件a中定义

(2)C语言const修饰全局变量默认是外部连接的,其他源文件可以调用,需要对其声明。

extern const int a;   //文件b中声明

(3)能否通过地址来改变a的值?

        const定义全局变量a,a会被存放在堆栈区,可通过指针间接修改从a的值,跳过编译器的检查。

2.2C++中的const

(1)用const定义基础变量时,C++编译器会把它放到符号表中,而不分配地址,但对它进行取地址操作时,C++会为其分配内存地址。

int main()
{
	const int a = 10;
	int *p = (int*)&a;
	*p = 20;
	cout << a << endl;
	cout << *p << endl;
	return 0;
}

运行结果:

(2)如果要在其他源文件中调用只读的全局变量a,定义时必须加extern

extern const int a = 10;  //文件a中定义
extern const int a;  //文件b中声明

(3)无法通过地址进行修改a的值

const由C++采用,并加进标准C中,他们很不一样。在C语言中,编译器对待const如同对待变量一样,只不过带有一个特殊标记,表示“你不能修改我”,本质还是个变量。

(4)对于自定义的数据类型,编译器也会为其分配内存。例如类对象。

2.3尽量使用const代替#define

const和#define的区别:

(1)const有类型,可以进行编译器类型安全检查;#define无类型不能进行类型检查,当工程很大时,不易进行错误排查。

(2)const由作用域,而#define不重视作用域,默认定义处到文件结尾都有效,如果定义在指定z作用域下有效的常量,那么#define不能用。

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值