最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++11 符號(hào)修飾與函數(shù)簽名、函數(shù)指針、匿名函數(shù)、仿函數(shù)、std::function與std::bind

 更新時(shí)間:2020年05月14日 09:43:21   作者:快牽著我的襪子  
這篇文章主要介紹了c++11 符號(hào)修飾與函數(shù)簽名、函數(shù)指針、匿名函數(shù)、仿函數(shù)、std::function與std::bind,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、符號(hào)修飾與函數(shù)簽名

1、符號(hào)修飾

編譯器將c++源代碼編譯成目標(biāo)文件時(shí),用函數(shù)簽名的信息對(duì)函數(shù)名進(jìn)行改編,形成修飾名。GCC的C++符號(hào)修飾方法如下:

1)所有符號(hào)都以_z開頭

2)名字空間的名字

名字空間(或類)的名字前加上N

名字前還有一個(gè)數(shù)字,是名字的字符數(shù)。比如1C,1是C的長(zhǎng)度。

3)函數(shù)名

與名字空間一樣,函數(shù)名前也有數(shù)字,比如4func,4是func的字符數(shù)。

4)參數(shù)

參數(shù)以E開頭

例子

N::C::func(int) 的函數(shù)簽名經(jīng)過修飾為_ZN1N1C4funcEi

2、函數(shù)簽名

函數(shù)簽名組成部分:包括函數(shù)名,參數(shù)類型,參數(shù)個(gè)數(shù)和順序,以及它所在類和命名空間。

以上任何一個(gè)部分的不同,都會(huì)導(dǎo)致符號(hào)修飾后的名詞不同,即導(dǎo)致函數(shù)簽名不同,故可以區(qū)分不同的函數(shù),在調(diào)用的時(shí)候就不會(huì)出錯(cuò)。

二、函數(shù)指針

例子: int(*p)(int,int)

語句定義了一個(gè)指向函數(shù)的指針變量P,這個(gè)函數(shù)指針可以指向這么一個(gè)函數(shù),即返回值為int類型,且有兩個(gè)int參數(shù)的函數(shù),指針p的類型為int(*)(int,int)。

函數(shù)指針的統(tǒng)一定義方式為:

函數(shù)返回類型(* 指針變量名)(函數(shù)參數(shù)列表)

簡(jiǎn)單用法:

int func(int x); //定義一個(gè)函數(shù)

int (*p)(int x);//定義一個(gè)函數(shù)指針

p=func;//將函數(shù)func的首地址賦值給指針變量p

三、c++11中的匿名函數(shù)(lambda函數(shù),lambda表達(dá)式)

C++11提供了對(duì)匿名函數(shù)的支持,稱為lambda函數(shù)(也成為lambda表達(dá)式),形式如下

[capture](parameters)->return-type{body}

解析:

capture

1)、[]//未定義變量,試圖在lambda函數(shù)內(nèi)使用任何外部變量都是錯(cuò)誤的

2)、[x,&y]//x按值捕獲,y按引用捕獲

3)、[&]//用到的任何外部變量都隱式按引用捕獲

4)、[=]//用到的任何外部變量都隱式按值捕獲

5)、[&,x]//x顯式按值捕獲,其他變量按照引用捕獲

6)、[=,&z]//z按引用捕獲,其他變量按值捕獲

parameters:存儲(chǔ)函數(shù)的參數(shù),當(dāng)parameters為空的時(shí)候,()可以省去

return-type:函數(shù)的返回值,如果funtion body中存在return語句,則該lambda表達(dá)式的返回類型由return語句的返回類型確定。

body:函數(shù)體

例子:

auto fun=[](int x){ return x; }

cout<<fun(1)<<endl;//輸出1

四、仿函數(shù)

本質(zhì):仿函數(shù)的本質(zhì)就是類重載了一個(gè)operator(),創(chuàng)建一個(gè)行為類似函數(shù)的對(duì)象。

例子:

template<class T>

stuct plus:public binary_function<T,T,T>{

T operator()(const T &x,const T &y) const{return x-y;}

};

cout<<"plus="<<plus<int>(2,1)<<endl;//輸出1

五、std::function與std::bind本質(zhì)

1、std::finction

std::function是函數(shù)模板類(是一個(gè)類);std::bind是函數(shù)模板(是一個(gè)函數(shù)),其包含在#include<functional>文件中。

std::function 即把函數(shù)對(duì)象化,將函數(shù)當(dāng)作一個(gè)類的對(duì)象,主要目的是期望看到更多的泛型算法,不希望看到使用函數(shù)取操作數(shù)據(jù)的代碼

通過std::function對(duì)C++中各種可調(diào)用實(shí)體(普通函數(shù)、lambda表達(dá)式,函數(shù)指針、以及其他的函數(shù)對(duì)象等)的封裝,形成一個(gè)新的可調(diào)用的std::function對(duì)象,讓我們不再糾結(jié)那么的的可調(diào)用實(shí)體。

例子:

1)、std::function<int(int a)> func//聲明一個(gè)std::function對(duì)象

2)、int test(int){return a};//普通函數(shù)

3)、auto test=[](int a)->int{return a}//匿名函數(shù)

4)、class test{//仿函數(shù)

public:
int operator()(int a){
return a;
}
};

5)、class test{//類成員函數(shù)&類靜態(tài)函數(shù)

public:
int tseta(int a){return a}
static int testb(int a){return a;}
};
//調(diào)用
//1、普通函數(shù)
func=test;
func(1);
//2、匿名函數(shù)
func=test
func(1);
//3、仿函數(shù)
test t;
func=t;
func(1);
//4、類成員函數(shù)
test t;
func=std::bind(&test::testa, t ,std::placeholder::_1); //std::placeholder::_1 :占位符號(hào)
func(1);
//5、類靜態(tài)成員函數(shù)
func=test::testb;
func(1);

2、std::bind

std::bind可以看作一個(gè)通用的函數(shù)適配器,它接受一個(gè)可調(diào)用對(duì)象,生成一個(gè)新的可調(diào)用對(duì)象來適應(yīng)原對(duì)象的參數(shù)列表。

作用:

1)std::bind將可調(diào)用對(duì)象和其參數(shù)綁定成一個(gè)仿函數(shù)

2)只綁定部分參數(shù),減少可調(diào)用對(duì)象傳入的參數(shù)

例子:

//1、綁定普通函數(shù)
int test_a(int x,inty){return x+y;}
auto test_A=std::bind(test_a,_1,10);//_1:占位符
test_A(2);//12
//2、綁定類成員函數(shù)
struct test_struct{
int test_b(int x,int y){
return x+y;
}
};
test_struct test_tt;
auto test_B=std::bind(&test_struct::test_b,&test_tt,20,30); //第一個(gè)參數(shù)為類成員函數(shù)的指針(必須顯示指定函數(shù),編譯器不幫忙),第二個(gè)參數(shù)為類對(duì)象的地址(指明哪個(gè)對(duì)象的指針),后面兩個(gè)為函數(shù)test_b的兩個(gè)參數(shù)
test_B();//50

總結(jié)

到此這篇關(guān)于c++11 符號(hào)修飾與函數(shù)簽名、函數(shù)指針、匿名函數(shù)、仿函數(shù)、std::function與std::bind的文章就介紹到這了,更多相關(guān)c++11 符號(hào)修飾符與函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ Opencv imfill孔洞填充函數(shù)的實(shí)現(xiàn)思路與代碼

    C++ Opencv imfill孔洞填充函數(shù)的實(shí)現(xiàn)思路與代碼

    在Matlab下,使用imfill可以很容易的完成孔洞填充操作,下面這篇文章主要給大家介紹了關(guān)于C++ Opencv imfill孔洞填充函數(shù)的實(shí)現(xiàn)思路與代碼,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • C++獲取系統(tǒng)時(shí)間的三種方法

    C++獲取系統(tǒng)時(shí)間的三種方法

    在?C++?編程中,獲取系統(tǒng)時(shí)間是一項(xiàng)常見任務(wù),無論是記錄日志、計(jì)算程序運(yùn)行時(shí)間,還是實(shí)現(xiàn)計(jì)時(shí)功能,都需要獲取當(dāng)前的系統(tǒng)時(shí)間,本文將介紹幾種在?C++?中獲取系統(tǒng)時(shí)間的方法,并提供相應(yīng)的代碼示例,需要的朋友可以參考下
    2024-09-09
  • 基于C語言實(shí)現(xiàn)http下載器

    基于C語言實(shí)現(xiàn)http下載器

    做OTA升級(jí)功能時(shí),我們能直接拿到的往往只是升級(jí)包的鏈接,需要我們自己去下載,這時(shí)候就需要用到http下載器。本文將利用C語言實(shí)現(xiàn)簡(jiǎn)單的http下載器,感興趣的可以了解一下
    2022-12-12
  • OpenCV?直方圖均衡化的實(shí)現(xiàn)原理解析

    OpenCV?直方圖均衡化的實(shí)現(xiàn)原理解析

    直方圖均衡化是通過拉伸像素強(qiáng)度分布范圍來增強(qiáng)圖像對(duì)比度的一種方法,今天通過本文給大家介紹OpenCV?直方圖均衡化的實(shí)現(xiàn)原理解析,感興趣的朋友跟隨小編一起看看吧
    2022-01-01
  • c語言沒有try catch的替代方案

    c語言沒有try catch的替代方案

    這篇文章主要介紹了c語言沒有try catch的替代方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • C語言18個(gè)必背經(jīng)典程序

    C語言18個(gè)必背經(jīng)典程序

    這篇文章主要分下工的是18個(gè)C語言必背的經(jīng)典程序,下面文章我們就來看看實(shí)例,需要的小伙伴可以參考一下喲,希望對(duì)你有所幫助
    2021-10-10
  • 詳解C語言求兩個(gè)數(shù)的最大公約數(shù)及最小公倍數(shù)的方法

    詳解C語言求兩個(gè)數(shù)的最大公約數(shù)及最小公倍數(shù)的方法

    這篇文章主要介紹了C語言求兩個(gè)數(shù)的最大公約數(shù)及最小公倍數(shù)的方法,輾轉(zhuǎn)相除法和輾轉(zhuǎn)相減法在解決這種問題時(shí)最常用到,需要的朋友可以參考下
    2016-03-03
  • C++短路求值(邏輯與、邏輯或)實(shí)例

    C++短路求值(邏輯與、邏輯或)實(shí)例

    這篇文章主要介紹了C++短路求值(邏輯與、邏輯或)實(shí)例,以實(shí)例形式講述了邏輯或的短路與邏輯與的短路及相應(yīng)的應(yīng)用實(shí)例,需要的朋友可以參考下
    2014-10-10
  • 基于C++的攝像頭圖像采集及拼接程序的簡(jiǎn)單實(shí)現(xiàn)

    基于C++的攝像頭圖像采集及拼接程序的簡(jiǎn)單實(shí)現(xiàn)

    本程序是在?ubuntu14.04?平臺(tái)下實(shí)現(xiàn)的,在本項(xiàng)目目錄下,已經(jīng)有編譯生成的可執(zhí)行程序,其中Camera_to_Frmae.cpp是我們從雙攝像頭實(shí)時(shí)抓取單幀圖像的源碼,對(duì)基于C++的攝像頭圖像采集及拼接程序的實(shí)現(xiàn)感興趣的朋友一起看看吧
    2022-01-01
  • C++實(shí)現(xiàn)關(guān)系與關(guān)系矩陣的代碼詳解

    C++實(shí)現(xiàn)關(guān)系與關(guān)系矩陣的代碼詳解

    這篇文章主要介紹了C++實(shí)現(xiàn)關(guān)系與關(guān)系矩陣,功能實(shí)現(xiàn)包括關(guān)系的矩陣表示,關(guān)系的性質(zhì)判斷及關(guān)系的合成,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04

最新評(píng)論

哈巴河县| 梧州市| 开原市| 夏津县| 亳州市| 都江堰市| 灵石县| 铜鼓县| 封丘县| 涿州市| 鄂伦春自治旗| 舒城县| 潞城市| 虎林市| 天气| 高密市| 周宁县| 建宁县| 泗阳县| 鸡东县| 华亭县| 静宁县| 新田县| 兴文县| 苍南县| 家居| 洪雅县| 剑阁县| 广灵县| 宣汉县| 松阳县| 拜城县| 华坪县| 临安市| 巫溪县| 巴林左旗| 洛扎县| 湖口县| 嘉定区| 名山县| 晋州市|