从C语言到C++的进阶之一些C基础上的增强用法(篇五)

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文件如此:
01
则在.h文件中声明应该带上extern “C”
02
这样我们在C++文件中才可以正常调用该外部文件中的mul函数:

#include <iostream>  //标准输入输出流
using namespace std;  //声明一段命名空间 ,且必须定义在全局范围内 

//要调用外部文件需要先包含 头文件,也就是对ex.c文件进行声明的文件 
#include "ex.h"  
int main()
{
    
    
	cout << mul(3, 4) << endl;
}

猜你喜欢

转载自blog.csdn.net/Viewinfinitely/article/details/111935562