C++基础 (4章)知识点:从C到C++语法上的区别

4.1全局变量的检测增强

c语言中通过

int a = 10;//定义
int a;	 //声明

c++中

int a = 10;
//int a; //这里会发生错误,提示 int a 重定义

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

c语言中的形参可以不用声明数据类型

int func1(i)
{
	printf("%d\n", i);
	return 0;
}
int func2(i)
{
	printf("%s\n", i);
	return 0;
}

c++中不可

4.3 更严格的类型转换

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

typedef enum COLOR {GREEN,RED,YELLOW} color;
void c2cpp_test_4_3()
{
	color mycolor = GREEN;
	//mycolor = 10; //c中能通过, c++中不能通过因为mycolor是color类型不能被其他类型赋值
}

4.4 struct类型加强

c语言中定义结构体变量时需要添加struct关键字,而c++中不需要
c语言中的结构体只能定义成员变量,不能定义成员函数,c++中既可以定义成员变量,也可以定义成员函数

struct cppstruct {
	string mName;
	int mAge;
	void setName(string name) { mName = name; }
	void setAge(int age) { mAge = age; }
	void showcppstruct()
	{
		cout << "name:" << mName << "Age:" << mAge << endl;
	}
};
void c2cpp_test_4_4()
{
	cppstruct cpp;
	cpp.setName("4.4");
	cpp.setAge(1223);
	cpp.showcppstruct();
}

新增bool类型关键字

bool类型占1字节大小(但只是用其中一位), 值为 true或false,并在给bool类型变量赋值时若所赋的值为非零,则其变量的值为true。

void c2cpp_test_4_5()
{
	cout << sizeof(false) << endl;
	bool flag = true;
	flag = 100;	//flag 仍为1 
	cout << flag << endl;
}

4.6三目运算符功能增强

c语言中三目运算表达式返回值为数据值,为右值,不能赋值

int a = 10;
int b = 20;
printf("ret:%d\n", a > b ? a : b);   //返回20 此时变量 a = 10 , b = 20 

c++中三目运算表达式返回值为变量本身的引用,为左值,可以赋值。

int e = 10;
int b = 20;

void c2cpp_test_4_6()
{
	printf("ret:%d\n", e > b ? e : b);   //返回 b  此时变量 a = 10 , b =20
	//c++新用法
	(e > b ? e : b) = 100;
	printf("b:%d\n", b);   //返回 b  此时变量 a = 10 , b =1001
}

C/C++中的const

const概念:const字面意思是常量,不变的,它是c/c++中的一个关键字,是一个限定符,它用来限定一个变量不允许改变,它将一个对象转换成一个常量。

const int const_test = 10; 
// const_test = 100; //报错

全局范围中:
在c语言中的const直接分配内存到只读数据段,该const修饰的变量具有extern功能是外部链接的。
在c++中,const不必创建内存,全局const当声明extern或者对变量进行取地址时,编译器会分配存储地址,变量存储在只读数据段,两个都受到只读数据段的保护,不可修改,且const不具备外部链接功能,只能在本文件中使用。

局部范围中:
语言中局部const存储在堆栈区中,只是不能通过变量直接修改const只读变量的值,但是可以跳过编译器的检查,通过指针间修改const值。
c++中对于局部的const变量要区别对待:
(1)对于基础数据类型,也就是const int a = 10这种,编译器会把它放到符号表中,不分配内存,当对其进行取地址操作时,会分配内存。
(2)对于基础数据类型,如果用一个变量初始化const变量,如果const int a = b,那么就会给 a分配内存。

void c2cpp_test_4_7()
{
	const int constA = 10;
	int *p = (int *)&constA;
	*p = 300;
	cout << "constA:" << constA << endl;
	cout << "*p:" << *p << endl;
	int d = 10;
	const int a = d;
	int * p2 = (int *)&a;
	*p2 = 300;
	cout << "a:" << a << endl;
	cout << "d:" << a << endl;
	cout << "*p2:" << *p << endl;
}

运行结果:

constA:10
*p:300
a:300
d:300
*p2:300
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值