1.C++新增了帶默認值參數的函數
1.1?格式
格式:返回值 函數名(參數1=初始值1,..........){}
例如:void function(int a=10){}
調用:不需要更改參數的值:function();
這個調用并沒有傳參,如果要輸出a的值,則輸出默認值a=10更改參數的值:function(20);
這里改變了參數的值,如果要輸出a的值,則輸出a=20(即默認值被覆蓋)
1.2?注意
此調用報錯,因為調用function(20),這里的20?默認傳遞給第一個形參
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 argument25 | void function(int a=10,int c)
規定:函數中攜帶默認值的參數需要放在不攜帶默認值的參數后(針對于多個參數講)
void function(int a , int c=10){}調用:function(20);
1.3?舉例
main.cpp
1.3.1?例1
#include <iostream>
using namespace std;//函數的形參可以帶默認值
void function(int c = 10) {cout << "c=" << c << endl;
}int main()
{function();//a=10//function(20);//a=20return 0;
}
1.3.2?例2
#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?概念:
內聯函數是指:程序在編譯過程中直接進行展開,就不需要在執行時對于函數的參數、局部變量、函數地址等入棧/出棧操作
用途:適用于短小且使用率非常高的代碼,內聯函數中一般不會放置循環結構
內聯函數的聲明:關鍵字:inline格式:inline 返回值 函數名 ([參數1,..........]){}調用:函數名([實參1,....])例如:inline void function(){}調用:function()
1.2?舉例
main.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等等,一般放置類的聲明、變量的聲明、函數的聲明等等