1、全局变量的检测增强
C++对于全局变量的检测和定义有更加严格的区分,在C语言的全局变量中可以这样定义:
int a; //定义
int a; //声明
int a; //声明
在C语言中,第一个算定义,后面的同名变量都算作声明。
而在C++中,这样表达就是错误的。必须使用extern来修饰:
int a;
extern int a;
extern int a;
2、新增Bool类型
也就是布尔类型,它只有两个值:true、false
在C语言中使用布尔类型需要#include <stdbool.h>
引入头文件,然后才可以bool flag= true;
使用bool类型。
而在C++中,不需要包含头文件,可以直接定义bool类型。
3、三目运算的增强
在C语言中有三目运算,比如求最大值:
int a=1, b=9;
big= a>b?a:b;
意思就是如果a>b则取a赋值给big,否则就将b赋值给big。也就是说在C语言中,三目运算返回的是表达式的值,是一个常量。
而在C++中,三目运算返回的是表达式的结果变量,是一个变量,是可以进行再赋值和运算的。
#include <iostream> //标准输入输出流
using namespace std; //声明一段命名空间 ,且必须定义在全局范围内
int main()
{
int a=1, b=9;
(a>b?a:b) = 999;
cout << "a为:" << a << endl;
cout << "b为:" << b << endl;
}
此处三目运算符返回的就是一个最大值的那个变量,也就是b,然后又赋值999给b,因此最终输出的b就是999了。
4、指针与常量的引用(别名)
(指针的引用)
指针引用的公式:type &p= q;
type为指针类型。
#include <iostream> //标准输入输出流
using namespace std; //声明一段命名空间 ,且必须定义在全局范围内
void fun(int* &p)
{
}
int main()
{
int *p= NULL;
fun(p);
}
(2)常量的引用
对常量起个别名就是对常量的引用了,简单来说就是在引用前加个const,const int &b= a;
便是对常量a的引用,也就是起个别名b。
5、内联函数的限制
以下情况编泽器可能考左不会将炳数进行内联编译:
- 下能存在任何形式的循坏
- 不能存在过多的条件判断语
- 函数体不能过于庞大
- 不能对函数进行取址操作
6、函数的占位参数
说白了就是用来占位的参数,在函数中可能不会用到它。
- 占位参数需要指定类型,表示占位;
- 在传参时,必须传入该参数的值,不能省略。
- 占位参数可以指定缺省值(默认值)
#include <iostream> //标准输入输出流
using namespace std; //声明一段命名空间 ,且必须定义在全局范围内
void fun(int a, int)
{
cout << a << endl;
}
void fun2(int b, int=2)
{
cout << b << endl;
}
int main()
{
fun(99, 1);
fun2(88);
}
7、extern "C"的用法
该用法用于在.h外部文件中对函数的声明,就是表明此处是对C文件进行声明,而不是C++文件。
比如.c文件如此:
则在.h文件中声明应该带上extern “C”
这样我们在C++文件中才可以正常调用该外部文件中的mul函数:
#include <iostream> //标准输入输出流
using namespace std; //声明一段命名空间 ,且必须定义在全局范围内
//要调用外部文件需要先包含 头文件,也就是对ex.c文件进行声明的文件
#include "ex.h"
int main()
{
cout << mul(3, 4) << endl;
}