c++基础学习1-c的升级c++
来源:互联网 发布:国信炒股软件 编辑:程序博客网 时间:2024/06/06 12:08
1,c++与c的关系:
1,C++继承了c的特性。
2,C++在C的基础上提供了更多的语法和特性,并支持面向对象机制。
3,C++的设计目标是运行效率与开发效率的统一。
C++中更强调语言的“实用性”, 所有的变量都可以在需要使用时
再定义。
例
for(int i=0;i<10i++)
{
}
可以在for循环中定义
注意:C语言中的变量都必须在作用域开始的位置定义!
2,register关键字的变化 :
1,register关键字请求“编译器”将局部变量存储于寄存器中。
2,在c语言中,是无法取得register变量的地址 ,c++虽然支持register关键字,但是只为了兼容c,c++有自己独有的优化方式来替代这个请求存入寄存器的register变量。其实register关键字在c++中已经不需要了。
3,在c++中一旦发现程序需要去register变量的地址时,register对变量的声明将无效。
3,c++对c的加强:
1,在c语言中,重复定义多个同名全局变量时合法的,在c++中不允许定义多个同名全局变量。
2,c语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上。
例1
#include <stdio.h>
int tmp;
int tmp = 5;
int main()
{
printf("tmp = %d\n",tmp);
}
在c中不会出错,在c++中是不允许的
4,c++编译器对const常量的处理
1,当碰到常量声明时首先会将常量加入符号表。
2,编译过程中若发现使用常量则 直接以符号表中的值替换。
3,编译过程中若发现对const使用了extern或者&操作符,则给对应的常量分配存储空间。
注,c++编译器可能为const常量分配空间,但不会使用其存储空间中的值。
例2:
下面的代码输出什么?
const int c = 0;int *p = (int *)&c;printf("start\n");*p = 5;printf("c = %d\n",c);printf("over\n");
在c中,你会说值为5,因为在c中,可以用指针改变它的值(在c中所谓的常量,其实是一个只读变量,分配存储空间,可以通过指针修改他的值),在如果你用c++编译执行后,输出的结果仍然是0,原因是c++会将声明为const常量放入符号表,并不会为其分配存储空间,要使用这个常量时,直接用符号表中的值代替。
还有一点像上面所说的,编译器在编译过程中,若发现对const使用了extern或者&操作符,则会给对应的常量分配存储空间,即使通过指针修改了这个空间的值,那么在使用这个常量时,还是会使用放在符号表中的值,所以说c++中的const是真正意义上的常量。
下面在来看一个例子
这段代码在c和c++中会如何?
答案是,在c中会报错,因为编译器无法确定只读变量m和n的值。
在c++中却是可以的,因为他将m,n视为常量。
总的来说
1,c++中const常量类似于宏
2,const实质却不是宏,const常量是编译器处理的,提供类型检查和作用域检查,宏定义由预处理器处理的只是单纯的文本替换。
5,struct类型的加强
1,在c中struct是定义了一组变量的集合,c编译器不认为这个一种新类型。
2,c++中却是一个新类型的定义声明。
例
struct tmp{ const char *name; int age;};tmp s1;tmp s2;
相比之下,在c中需要struct tmp t1;因为c编译器只认为struct是定义了一组变量的集合,不认为是一种新类型。所以
tmp t1;这样的代码 用c编译器是无法通过的。
3, c++中所有的变量和函数都必须有类型。
4,c语言中的默认类型在c++中是不合法的。
例
请问 1,函数f的返回值是什么类型,参数是什么类型?
2,函数g可以接受多少个参数?
看下面的答案:
总结上面说明 1,在c语言中
int f();表示返回值为int,接受任意参数的函数。
int f(void)表示返回值为int的无参函数。
在c++中
int f(); int f(void)具有相同意义,都表示返回值为int的无参函数。
- c++基础学习1-c的升级c++
- 学习OC必备的C基础1
- C-1-C基础
- C语言基础学习(1)
- 1、C/C++基础学习
- C++基础——C++对C的升级
- C基础学习的简单记录--基础练习(1)
- 小白零基础学习C++(1)基础类的实现
- C基础学习总结
- c基础学习 - 指针
- object-c 基础学习(-)
- c语言基础学习
- c语言基础学习
- c语言基础学习
- c 基础学习
- 学习C语言基础
- C 语言基础学习
- c语言基础学习
- Linux下Mysql使用问题总结
- linux系统设置
- Lession 3接口与String类
- unlink()函数
- centos6.5(i386) 安装Foreman
- c++基础学习1-c的升级c++
- iOS开发知识点装逼1:理解assign,copy,retain变strong
- CS0016: 未能写入输出文件“c:\WINDOWS\Microsoft.NET\Framework\.。。”--“拒绝访问
- debian6下redis+keepalived故障自动切换
- IOS项目打包除去NSLog和NSAssert处理之阿堂教程
- ORACLE常见问题总结ing
- 智和信通SugarNMS无线微波网管解决方案
- MVC笔记
- pageContext,request,session,application的使用及区别