C++ 比 C语言增加的新特性 2

1.C++新增了带默认值参数的函数

1.1 格式

cpp 复制代码
格式:
	返回值   函数名(参数1=初始值1,..........)
	{

	} 
例如:
	void  function(int  a=10)
	{
		
	}
调用:
	不需要更改参数的值:
		function();
这个调用并没有传参,如果要输出a的值,则输出默认值a=10

	更改参数的值:
		function(20);
这里改变了参数的值,如果要输出a的值,则输出a=20(即默认值被覆盖)

1.2 注意

此调用报错,因为调用function(20),这里的20 默认传递给第一个形参

cpp 复制代码
void  function(int a=10,  int  c)
	{

	}
	调用:
		function(20);//报错


//报错信息
		test2.cpp:25:28: error: default argument missing for parameter 2 of 'void function(int, int)'
 	  25 | void function(int a=10,int c)
    	  |                        ~~~~^
		test2.cpp:25:19: note: ...following parameter 1 which has a default argument
  		 25 | void function(int a=10,int c)

规定:函数中携带默认值的参数需要放在不携带默认值的参数后(针对于多个参数讲)

cpp 复制代码
void function(int  a ,  int  c=10)
	{

	}

	调用:
		function(20);

1.3 举例

main.cpp

1.3.1 例1

cpp 复制代码
#include <iostream>
using namespace std;

//函数的形参可以带默认值
void function(int c = 10) {
	cout << "c=" << c << endl;
}

int main()
{
	function();//a=10

	//function(20);//a=20
	return 0;
}

1.3.2 例2

cpp 复制代码
#include <iostream>
using namespace std;

//函数的形参可以带默认值
//void function(int c = 10) {
//	cout << "c=" << c << endl;
//}

//void function1(int c = 10,int b) {
//	cout << "c=" << c << endl;
//}

void function2(int b,int c = 10) {
	cout << "b=" << b << endl;
	cout << "c=" << c << endl;
}

int main()
{
	//function();//a=10

	//function(20);//a=20

	//function1(20);//报错

	function2(20);//报错

	return 0;
}

2. 内联函数

2.1 概念:

内联函数是指:程序在编译过程中直接进行展开,就不需要在执行时对于函数的参数、局部变量、函数地址等入栈/出栈操作

用途:适用于短小且使用率非常高的代码,内联函数中一般不会放置循环结构

cpp 复制代码
内联函数的声明:
		关键字:inline
		格式:
			inline   返回值    函数名  ([参数1,..........])
			{
				
			}
		调用:
			函数名([实参1,....])
		例如:
			inline  void function()
			{

			}
			调用:function()

1.2 举例

main.cpp

cpp 复制代码
//内联函数的使用
inline int max(int a,int b) {
	return a > b?a: b;
}

int main()
{
	int a = 10;
	int b = 20;
	int ret = max(a,b);
	cout << "ret=" << ret << endl;
	return 0;
}

1.3 面试题

对于一段精简、使用频度高的代码,C语言如何实现才能提高效率,C++如何实现才能提高效率?

C++中将这段代码声明为内联函数

C语言使用宏来实现

例如以下两个举例

#define get_Max(a,b) a>b?a:b

#define sum(a,b) (a)*b

int sum_result=sum(10+20 , 30) ;//900

3. 另外c++还增加了以下等等

(5)新增异常处理

C++可以主动产生异常,并捕获异常进行处理

(6)新增面向对象机制

封装、继承、多态等等

(7)智能指针

用于帮助用户管理堆内存空间

4. C++的编译流程和文件架构

4.1 C++的编译流程

与C一样,在Linux中编译C++代码,一般采用g++

请你阐述C/C++的编译流程,以及每个流程中执行的工作任务

(1)预处理

a、将除源文件以外的内容全部加入到源文件中

b、进行宏替换工作

c、删除掉注释

(2)编译

a、检查用户编写的代码是否符合C++语法规范

b、将用户编写的代码翻译成汇编语言

(3)汇编

a、将汇编语言翻译成机器语言

(4)链接

a、生成可执行文件

4.2 C++的文件架构以及扩展名

(1)主程序文件

该文件中包含main函数,一般放置类的声明与实例化,函数的声明与定义等等

(2)源文件(一般是以.cpp为主)

源文件的后缀名一般是.cpp、.cxx、.cc等等,一般放置类的成员函数实例化、函数的定义等等

(3)头文件(一般是以.h为主)

头文件的后缀名一般是.h、.hpp、.hxx等等,一般放置类的声明、变量的声明、函数的声明等等

相关推荐
17(无规则自律)9 分钟前
【Linux驱动实战】:字符设备之ioctl与mutex全解析
linux·c语言·驱动开发·嵌入式硬件
weixin_5375904510 分钟前
《C程序设计语言》练习答案(练习1-4)
c语言·开发语言
2301_819414301 小时前
C++与区块链智能合约
开发语言·c++·算法
不想看见4041 小时前
Valid Parentheses栈和队列--力扣101算法题解笔记
开发语言·数据结构·c++
炸膛坦客1 小时前
单片机/C/C++八股:(十五)内存对齐、结构体内存对齐
c语言·开发语言·单片机
老约家的可汗1 小时前
C/C++内存管理探秘:从内存分布到new/delete的底层原理
c语言·c++
天赐学c语言1 小时前
Linux - 应用层自定义协议与序列/反序列化
linux·服务器·网络·c++
计算机安禾1 小时前
【C语言程序设计】第37篇:链表数据结构(一):单向链表的实现
c语言·开发语言·数据结构·c++·算法·链表·蓝桥杯
jarreyer1 小时前
CentOS 7 无法使用 yum 安装软件
linux·运维·centos
阿贵---2 小时前
C++构建缓存加速
开发语言·c++·算法