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等等,一般放置类的声明、变量的声明、函数的声明等等

相关推荐
炸膛坦客5 小时前
嵌入式 - 数据结构与算法:(1-4)数据结构 - 单链表的两个核心缺点(引入循环/双向链表)
c语言·数据结构·链表
春蕾夏荷_7282977255 小时前
2、c++ acl tcp服务器客户端简单实例-服务器端(1)
服务器·c++·tcp/ip
墨染千千秋5 小时前
C++if判断的使用全解
c++
雪度娃娃5 小时前
设计模式——单例模式
开发语言·c++·设计模式
嵌入式×边缘AI:打怪升级日志5 小时前
Tina SDK Linux Kernel 基本使用(实战篇:为7寸RGB LCD触摸屏添加驱动支持).md
linux·运维·服务器
Lenyiin6 小时前
《LeetCode 顺序刷题》61 - 70
java·c++·python·算法·leetcode·lenyiin
想唱rap6 小时前
应用层HTTPS协议
服务器·网络·c++·网络协议·http·https
前端之虎陈随易6 小时前
为什么今天还会有新语言?MoonBit 想解决什么问题?
大数据·linux·javascript·人工智能·算法·microsoft·typescript
G.晴天6 小时前
Linux常用命令练习流程
java·linux·运维·服务器·tomcat
_F_y6 小时前
仿RabbitMQ实现消息队列-客户端模块实现
c++·算法·rabbitmq