C++对C的增强
来源:互联网 发布:python opencv cuda 编辑:程序博客网 时间:2024/05/20 18:41
1、全局变量检测增强
例如:int a=10;//赋值,当做定义
int a;//没有赋值,当做声明
int main()
{
printf("a:%d\n",a);
return EXIT_SUCCESS;
}
上述代码在C++下编译失败,在C下编译通过。
2、C++中所有的变量和函数都必须有类型
例如:
//i没有写类型,可以是任意类型
int fun1(i){
printf("%d\n", i);
return 0;
}
//i没有写类型,可以是任意类型
int fun2(i){
printf("%s\n", i);
return 0;
}
//没有写参数,代表可以传任何类型的实参
int fun3(){
printf("fun33333333333333333\n");
return 0;
}
//C语言,如果函数没有参数,建议写void,代表没有参数
int fun4(void){
printf("fun4444444444444\n");
return 0;
}
g(){
return 10;
}
int main(){
fun1(10);
fun2("abc");
fun3(1, 2, "abc");
printf("g = %d\n", g());
return 0;
}
以上c代码c编译器编译可通过,c++编译器无法编译通过。
在C语言中,int fun() 表示返回值为int,接受任意参数的函数,int fun(void) 表示返回值为int的无参函数。
在C++ 中,int fun() 和int fun(void) 具有相同的意义,都表示返回值为int的无参函数。
3、类型转换更加严格在C++,不同类型的变量一般是不能直接赋值的,需要相应的强转
例如:typedef enum COLOR{ GREEN, RED, YELLOW} color;
int main(){
color mycolor= GREEN;
mycolor= 10;
printf("mycolor:%d\n", mycolor);
char* p= malloc(10);
return EXIT_SUCCESS;
}
以上c代码c编译器编译可通过,c++编译器无法编译通过
4、struct类型的增强1)c中定义结构体变量需要加上struct关键字,c++不需要。
2)c中的结构体只能定义成员变量,不能定义成员函数。c++即可以定义成员变量,也可以定义成员函数。
如://1. 结构体中即可以定义成员变量,也可以定义成员函数
struct Student{
string mName;
int mAge;
void setName(string name){mName = name; }
void setAge(int age){mAge = age; }
void showStudent(){
cout << "Name:" << mName<< " Age:" << mAge<< endl;
}
};
//2. c++中定义结构体变量不需要加struct关键字
void test01(){
Student student;
student.setName("John");
student.setAge(20);
student.showStudent();
}
5、新增bool类型
标准c++的bool类型有两种内建的常量true(转换为整数1)和false(转换为整数0)表示状态。这三个名字都是关键字。
1) bool类型只有两个值,true(1值),false(0值)
2) bool类型占1个字节大小
3) 给bool类型赋值时,非0值会自动转换为true(1),0值会自动转换false(0)
例:
void test()
{ cout <<sizeof(false) <<endl; //为1,//bool类型占一个字节大小
bool flag =true; // c语言中没有这种类型
flag = 100;//给bool类型赋值时,非0值会自动转换为true(1),0值会自动转换false(0)
}
[c语言中的bool类型]
c语言中也有bool类型,在c99标准之前是没有bool关键字,c99标准已经有bool类型,包含头文件stdbool.h,就可以使用和c++一样的bool类型
6、三目运算符功能增强1)c语言三目运算表达式返回值为数据值,为右值,不能赋值
例:int a= 10;
int b = 20;
printf("ret:%d\n", a> b ? a: b);
//思考一个问题,(a > b ? a : b)三目运算表达式返回的是什么?
//(a > b ? a : b) = 100;
//返回的是右值
2)c++语言三目运算表达式返回值为变量本身(引用),为左值,可以赋值
例:
int a= 10;
int b = 20;
printf("ret:%d\n", a> b ? a: b);
//思考一个问题,(a > b ? a : b)三目运算表达式返回的是什么?
cout << "b:" << b<< endl;
//返回的是左值,变量的引用
(a > b? a : b) = 100;//返回的是左值,变量的引用
cout << "b:" << b<< endl;
7、const增强C语言中const是伪常量,可以通过指针修改
C++中const会放入到符号表中
C语言中const默认是外部链接,C++中const默认是内部链接
const分配内存情况
对变量取地址,会分配临时内存
extern关键字下的const会分配内存
用普通变量初始化const变量
自定义数据类型会分配内存
尽量用const代替define
define宏没有作用域概念
define宏常量没有类型
- c++对c的增强
- C++对C的增强
- C++对C的增强
- C++对C的增强
- C++对C的增强
- C++对C的增强
- C++对C的增强
- C++对C语言语法的增强
- C++对C的实用性增强
- C++对C语言register的增强
- C++ 对C语言的增强
- 对C语言register的增强
- 05-C++对C的增强
- c++对c语言上的增强
- c++对c对增强实用性”增强
- C++对C的“增强”,表现在六个方面:
- C++对C语言的变量检测增强
- 第一章 C++对C的扩展(Externsion)--(1)类型增强
- myeclipse写jsp页面出现问题
- PXE工作原理(有图有真相)
- Eclipse和Tomcat对JDK与JRE的使用
- 2017-12-13
- poj1013 Counterfeit Dollar 称硬币
- C++对C的增强
- "黑科技"改变生活 业内称人工智能将迎第三次爆发
- 探秘深圳智能公交:无人驾驶公交离我们有多远?
- 主角面朝方向一定区域内对象角度计算(点是否在扇形区域检测)
- NSData 接受数据不正确
- ExtJS5 实现树形菜单
- Java开发大型互联网-架构师必须掌握的分布式技术
- 对MySql数据库插入数据操作
- CentOS7.2下安装MySQL-5.7.18RPM Bundle版(适用于最新版5.7.20)