C++在C语言基础之上增强的几个实用特性总结
变量的定义
C语言中的变量都必须在作用域开始的位置定义!! C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义。
#include <iostream> using namespace std; int main11() { int i = 0; printf("ddd"); int k; // 这段代码在vc6,C语言编译情况下就会报错。就是因为这里的定义 system("pause"); return 0; }
对C语言register的增强
register关键字 请求编译器让变量a直接放在寄存器里面,速度快
在c语言中 register修饰的变量 不能取地址,但是在c++里面做了内容:
1.register关键字的变化
register关键字请求“编译器”将局部变量存储于寄存器中,C语言中无法取得register变量地址,在C++中依然register关键字,C++编译器有自己的优化方式,不使用register也可能做优化,C++中可以取得register变量的地址。
2.C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。
3.早期C语言编译器不会对代码进行优化,因此register变量是一个很好的补充。
demo
#include <iostream> int main() { register int a = 0; printf("&a = %x\n", &a); // c语言这里会报错 for (int i = 1; i < 1000; i++) { // 而对于这种频繁使用i的情况自动进行优化,将i放入寄存器中 printf("%d\n", i); } system("pause"); return 0; }
对C语言的变量检测增强
在C语言中,重复定义多个同名的全局变量是合法的;在C++中,不允许定义多个同名的全局变量。
C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上。
demo
#include <stdio.h> int g_var; int g_var = 1; // C语言可以编译通过 // C++直接拒绝这种二义性 int main(int argc, char *argv[]) { printf("g_var = %d\n", g_var); return 0; }
struct类型增强
C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型。
C++中的struct是一个新类型的定义声明。
demo
struct Student { char name[100]; int age; }; int main(int argc, char *argv[]) { // C语言中需要在定义结构体的时候加struct,而C++不需要 Student s1 = { "wang", 1 }; Student s2 = { "wang2", 2 }; return 0; }
C++中所有的变量和函数都必须有类型
C语言中的默认类型在C++中是不合法的,比如说函数f的返回值是什么类型,参数又是什么类型? 函数g可以接受多少个参数?
更换成.cpp就会报错
f(i) { printf("i = %d\n", i); } g() { return 5; } int main(int argc, char *argv[]) { f(10); printf("g() = %d\n", g(1, 2, 3, 4, 5)); getchar(); return 0; }
三目运算符的增强
在C语言中表达式的结果放在寄存器中,在C语言中,表达式的返回值是变量的值,在C++中,表达式返回的是变量的本身。
int main(){int a = 10;int b = 20;// 返回一个最小数,并且给最小数赋值成3
三目运算符是一个表达式,表达式不可能做左值,所以这个在C语言中无法编译通过
(a < b ? a : b) = 30;
而在C++中就可以编译运行。C语言中也可以实现相同的功能:
(a < b ? &a : &b) = 30;return 0;}
C++中const加强
C语言中的const是一个冒牌货。
int main() { // 好像a是一个常量 const int a = 10; int *p = NULL; p = (int *)&a; *p = 20; // 间接赋值 printf("a:%d\n", a); // C语言中显示a被修改了 // C++则显示a还是10,没有改变 return 0; }
C++中的const是一个真正的常量。
解释:
C++编译器对const常量的处理。
当碰见常量声明时,在符号表中放入常量。
编译过程中若发现使用常量则直接以符号表中的值替换。
编译过程中若发现对const使用了extern或者&操作符,则给对应的常量分配存储空间(兼容C)。
相关文章
- 这篇文章主要为大家详细介绍了C语言实现放烟花的程序,有音乐播放,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-23
- 本篇文章主要介绍C语言中char的知识,并附有代码实例,以便大家在学习的时候更好的理解,有需要的可以看一下...2020-04-25
- vector是表示可以改变大小的数组的序列容器,本文主要介绍了C++STL标准库std::vector的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2022-03-06
- 这篇文章主要介绍了C++中取余运算的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
- 这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
- 这篇文章主要介绍了详解如何将c语言文件打包成exe可执行程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-25
- 本篇文章主要介绍了C++中四种加密算法之AES源代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...2020-04-25
- 整数拆分,指把一个整数分解成若干个整数的和。本文重点给大家介绍C++ 整数拆分方法详解,非常不错,感兴趣的朋友一起学习吧...2020-04-25
- 这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
- 这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
- free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
- 这篇文章主要介绍了C语言中计算正弦的相关函数总结,包括正弦和双曲线正弦以及反正弦的函数,需要的朋友可以参考下...2020-04-25
详解C语言中的rename()函数和remove()函数的使用方法
这篇文章主要介绍了详解C语言中的rename()函数和remove()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25- 这篇文章主要介绍了C++ bitset用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 本篇文章小编并不是为大家讲解string类型的用法,而是讲解我个人比较好奇的问题,就是string 类型占几个字节...2020-04-25
- 这篇文章主要介绍了C语言中求和、计算平均值、方差和标准差的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-10
- 这篇文章主要为大家详细介绍了C++ Eigen库计算矩阵特征值及特征向量,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
- 这篇文章主要介绍了VSCode C++多文件编译的简单使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-29
- 这篇文章主要介绍了C++ pair的用法实例详解的相关资料,需要的朋友可以参考下...2020-04-25