一、c到c++的升级
来源:互联网 发布:在美橙互联域名备案 编辑:程序博客网 时间:2024/05/14 14:31
1.c++中更强调语言的“实用性”,所有变量都可以在需要时再定义
#include <stdio.h>int main(int argc, char *argv[]){ int c = 0; printf("Begin...\n"); for(int i=0; i<10; i++)//用到时再定义 { for(int j=0; j<10; j++) { c += i * j; } } printf("c = %d\n", c); printf("End...\n"); printf("Press enter to continue ..."); getchar(); return 0;}
2.register关键字的变化:
(1). 在c语言中,register是将变量存在寄存器中,c语言中无法取得该变量的地址,但是在 c++中可以取得register变量的地址, c++编译器发现程序需要取得register变量的地址时,register对变量的声明.无效,这只是早期c++编译器的做法,现代的编译器
根本不会看register
(2). 在c++中,编译器有自己的优化方式,不使用register也可能做优化,有 register只是为了兼容c,要不要无所谓
#include <stdio.h>int main(int argc, char *argv[]){ register int c = 0; printf("Begin...\n"); printf("&c = %08X\n", &c);//取地址 printf("End...\n"); printf("Press enter to continue ..."); getchar(); return 0;}
3.全局变量重定义的变化:
(1). c语言中可以重复定义多个同名的全局变量,这些变量最终会被链接到全局数据区的同一个地址空间
(2). c++中不允许定义多个同名的全局变量,出现二义性报错
#include <stdio.h>int g_var;int g_var = 1;//程序会报错int main(int argc, char *argv[]){ printf("Begin...\n"); printf("g_var = %d\n", g_var); printf("End...\n"); printf("Press enter to continue ..."); getchar(); return 0;}
4.const关键字的变化:
(1). const关键字修饰的变量在c++中会变成真正常量,在c中是只读的变量,本质还是变量
(2). c++编译器对const的处理:
当碰见常量声明时在符号表中放入常量
编译过程中若发现使用常量则直接以符号表中的值代替
编译过程中若发现对const使用了extern或者&操作,则给对应的常量分配存储空间
注:虽分配存储空间,但不会使用存储空间中的值(即改变了存储空间的值也没用,编译器不会使用,只会使用符号表中的值)
例子:数组a[c+d]在c语言中会报错,但c++中不会
c++中用const修饰与#define的区别:const是由编译器处理的,会进行类型、作用域等检查,二
宏定义由预处理器处理,只是简单的替换,如define在a函数中定义,在b函数中也可以使用,但是
用const定义的则不可以。如果这都想要define,则可以在函数末尾#undefined a
#include <stdio.h>int main(int argc, char *argv[]){ const int c = 0; int* p = (int*)&c; printf("Begin...\n"); *p = 5;//取地址之后就会分配空间,但是会用里边的值 printf("c = %d\n", c);//p的值仍然为0 printf("End...\n"); printf("Press enter to continue ..."); getchar(); return 0;}
#include<stdio.h>void g(){ #define a 3 const b = 5;}void f(){ printf("%d", a);//不会报错,宏是由预处理器来处理的,不会进行类型和作用域的检查 printf("%d", b);//报错,const常量是由编译器处理,进行类型和作用域的检查}int main(){ f(); return 0;}
5.struct类型的加强:
(1). c语言中的struct定义了一组变量的集合,c编译器并不认为这是一种新的类型
(2). c++中的struct是一个新类型的定义声明
#include <stdio.h>struct Student{ const char* name; int age;};int main(int argc, char *argv[]){ Student s1 = {"Delphi", 30};//注意是用student来定 义而不是用struct可以这样直接用,但在c中报错(c中还 //需要另外定义结构体变量) Student s2 = {"Tang", 30}; printf("Press enter to continue ..."); getchar(); return 0;}
6.类型的加强
(1). c++里所有的变量和函数必须有类型(返回值啊、参数的类型等等都要有)
(2). c语言中的默认类型在c++中是不合法的
如:在c语言里:
int f();表示返回值为int,接收任意参数的函数
int f(void);表示返回值为int的无参函数
c++中:
int f();和int f(void);都表示返回值为int的无参函数
7.c++中的布尔类型:
(1). c++在C语言的基础类型系统之上增加了bool,且bool可取的值只有true和false
(2). 理论上bool只占用一个字节,如果多个bool变量定义在一起,可能会各占用一个bit(注意是bit不是字节),这取决于编译器的实现
(3). true代表真值,编译器内部用1来表示,false代表非真值,编译器内部用0来表示,且只能是0和1
(4). true、false、bool在c++里都是关键字了
例子:
bool a = true;
a = 3;
b = a;
结果a和b的值都是1而不是3,但是a = 0;则最后是0,说明bool只有true和false两个值
为了兼容c语言,bool也可以参与数学运算,但是会将最终得到非零值就转化为true,得到零就转换为false
8.三目运算符
(1).c语言里三目运算符不能当左值,只能当右值
(2).c++里可以既可以做左值也可以当右值,但三目运算符可能的返回值中只要有一个是常量就不可以做左值
例子:
int a = 1;
int b = 2;
(a
- 一、c到c++的升级
- C++要点摘录(一)C到C++的升级
- C到C++的升级
- c到c++的升级
- c到c++的升级
- C到C++的升级
- C到C++的升级
- C到C++的升级
- C到C++的升级
- 1.C到C++的升级
- 从C到C++的升级
- C语言到C++的升级
- 从c到c++的升级
- C到C++的升级 (2)
- 从C到C++的升级
- 从C到C++的升级之函数升级
- 1、不一样的C++系列--C到C++的升级
- c++学习笔记(1.c到c++的升级)
- 显示Syntax error, insert ";" to complete Statement
- ssm框架,往数据库插入一条数据,返回插入数据的id
- 一 二 三级界面的连接 问题 (1)
- J2ME多线程问题
- JAVAME环境完成 从哪里开始练习!?
- 一、c到c++的升级
- 请问nokia的手机采用的是什么样的处理器?使用哪些汇编语言?
- vim命令集合
- 基于Retrofit拦截器的自动登陆
- 手机上编写数据处理小程序用j2me合适吗
- boost thread_group
- yml格式或者叫做YAML格式数据学习
- 应用显示名称的疑问
- 堆排序