C++在C的基础上改进了什么细节
这篇文章主要介绍“C++在C的基础上改进了什么细节”,在日常操作中,相信很多人在C++在C的基础上改进了什么细节问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++在C的基础上改进了什么细节”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
变量定义位置
ANSI C 规定,所有局部变量都必须定义在函数开头,在定义好变量之前不能有其他的执行语句。C99 标准取消这这条限制,但是 VC/VS 对 C99 的支持很不积极,仍然要求变量定义在函数开头。请看下面的代码:
#include <stdio.h>int main(){int a;scanf("%d", &a);int b;scanf("%d", &b);int c = a + b;printf("%d\n", c);return 0;}
将代码保存到源文件main.c
,那么它可以在 GCC、Xcode 下编译通过,但在 VC/VS 下会报错。GCC、Xcode 对 C99 的支持非常好,可以在函数的任意位置定义变量;但 VC/VS 对 C99 的支持寥寥无几,必须在函数开头定义好所有变量。
将上面的代码再保存到源文件main.cpp
,那么它在 GCC、Xcode、VC/VS 下都可以编译通过。这是因为 C++ 取消了原来的限制,变量只要在使用之前定义好即可,不强制必须在函数开头定义所有变量。
注意源文件的后缀,.c
是C语言代码,.cpp
是C++代码,它们的编译方式不同。
取消限制带来的另外一个好处是,可以在 for 循环的控制语句中定义变量,请看下面的例子:
#include <iostream>using namespace std;int sum(int n){int total = 0;//在for循环的条件语句内部定义变量ifor(int i=1; i<=n ;i++){total += i;}return total;}int main(){cout<<"Input a interge: ";int n;cin>>n;cout<<"Total: "<<sum(n)<<endl;return 0;}
运行结果:
Input a interge: 10
Total: 55
在 for 内部定义循环控制变量 i,会让代码看起来更加紧凑,并使得 i 的作用域被限制在整个 for 循环语句内部(包括循环条件和循环体),减小了命名冲突的概率。在以后的编码过程中,我推荐这种写法。
布尔类型(bool)
在C语言中,关系运算和逻辑运算的结果有两种,真和假:0 表示假,非 0 表示真。例如:
#include <stdio.h>int main(){int a, b, flag;scanf("%d %d", &a, &b);flag = a > b; //flag保存关系运算结果printf("flag = %d\n", flag);return 0;}
运行结果:
10 20↙
flag = 0
C语言并没有彻底从语法上支持“真”和“假”,只是用 1 和 0 来代表。这点在 C++ 中得到了改善,C++ 新增了bool
类型,它一般占用 1 个字节长度。bool 类型只有两个取值,true 和 false:true 表示“真”,false 表示“假”。请看下面的例子:
#include <iostream>using namespace std;int main(){int a, b;bool flag; //布尔变量cin>>a>>b;flag = a > b;cout<<"flag = "<<flag<<endl;return 0;}
10 20↙
flag = 0
遗憾的是,在 C++ 中使用 cout 输出 bool 变量的值时还是用数字 1 和 0 表示,而不是 true 或 false。Java、PHP、JavaScript 等也都支持布尔类型,但输出结果为 true 或 false,我武断地认为这样更科学。
你也可以显式地对 bool 变量赋值,例如:
#include <iostream>using namespace std;int main(){bool flag = true;if(flag){cout<<"true"<<endl;}else{cout<<"false"<<endl;}flag = false;if(flag){cout<<"true"<<endl;}else{cout<<"false"<<endl;}return 0;}
运行结果:
true
false
注意,true 和 false 是 C++ 中的关键字。
到此,关于“C++在C的基础上改进了什么细节”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341