c++三目运算符及const关键字的增强

我们都知道c++对c进行了加强,今天就来分享一下对三目运算符和const关键字的增强。

三目运算符的增强

int main30()
{
	int a = 10;
	int b = 20;

	//返回一个最小数 并且给最小数赋值成3
	//三目运算符是一个表达式 ,表达式不可能做左值
	(a < b ? a : b) = 30;

	printf("a = %d, b = %d\n", a, b);

	system("pause");

	return 0;
}

在c语言中这么写会编译器会报左值必须是可修改的错,这是由于在c语言编译器中 a < b ? a : b返回的是具体的值,即10=30,这显然不对。

但是在c++中就可以运行

c++三目运算符及const关键字的增强_第1张图片

c++编译器对其进行了优化返回的是他的地址。

我们可以在c语言中*(a < b ? &a : &b) = 30;这么写就代表返回的是他的地址在取值就等于间接赋值。

结论:

1)C语言返回变量的值 C++语言是返回变量本身

C语言中的三目运算符返回的是变量值,不能作为左值使用

C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方

2)注意:三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用

(a < b ? 1 : b )= 30;

3)C语言如何支持类似C++的特性呢?

====>当左值的条件:要有内存空间;C++编译器帮助程序员取了一个地址而已

const关键字的增强

先来看一段代码

int main()
{
	const int a;
	int *p = NULL;
	p = &a;
	*p = 20;
	printf("a:%d\n", a);
	system("pause");
	return 0;
}

 c++三目运算符及const关键字的增强_第2张图片

这是在c语言中运行的结果,通过间接赋值可以修改a变量本身的值

c++三目运算符及const关键字的增强_第3张图片

这是在c++中 ,我们可以看到a的值并没有被修改,这是由于c++编译器对const关键字进行了优化,在用const声明的变量会有一个符号表用于保存常量。

c++三目运算符及const关键字的增强_第4张图片

结论:

C语言中的const变量

C语言中const变量是只读变量,有自己的存储空间

C++中的const常量

可能分配存储空间,也可能不分配存储空间  

当const常量为全局,并且需要在其它文件中使用

当使用&操作符取const常量的地址

 

你可能感兴趣的:(c++,c,c++,开发语言)