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

相关推荐
运筹vivo@16 分钟前
LeetCode 2405. 子字符串的最优划分
c++·算法·leetcode·职场和发展·哈希表
♛识尔如昼♛38 分钟前
C 进阶(9) - 信号
c语言·信号
有点。44 分钟前
C++(枚举法一练习题)
开发语言·c++·算法
basketball6161 小时前
C++ 单例模式完全指南:从饿汉式到现代 C++ 的最佳实践
java·c++·单例模式
玖釉-1 小时前
栈——栈的定义及基本操作
c++·windows·算法·图形渲染
LN花开富贵1 小时前
Ubuntu aarch64 架构安装 NoMachine 远程控制 避坑与实战
linux·运维·笔记·学习·ubuntu·嵌入式
不想写代码的星星1 小时前
C++ 内存序六件套:从完全同步到爱咋咋地
c++
取经蜗牛2 小时前
Windows 11 WSL + Ubuntu 24.04 安装指南
linux·windows·ubuntu
杨云龙UP2 小时前
Oracle RAC/ODA环境下如何准确查询PDB表空间已分配大小?一次说清Oracle表空间逻辑大小和ASM三副本实际占用_2026-05-19
linux·运维·数据库·sql·oracle·ffmpeg
2023自学中2 小时前
imx6ull开发板,Linux-c编程,识别 键盘、鼠标、触摸屏坐标
linux·嵌入式·开发板·应用编程