精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

讓人壓抑的 C++:記一個函數(shù)指針的問題

開發(fā) 前端
如果你也需要直接獲取存儲的函數(shù)指針的地址,最好還是直接使用原始的函數(shù)指針,而不是通過 std::function 來存儲和獲取函數(shù)指針的地址。?

最近因為項目要求用c++,之前一直很討厭c++,沒辦法只能短時間彌補c++的知識,項目中需要定義一個函數(shù)指針類型的vector,本以為很簡單的問題,結(jié)果調(diào)試了一天,才發(fā)現(xiàn)錯在哪里。

多余的std::function

先上代碼吧,這里有一個測試代碼,為什么要有測試代碼?是因為下面的方式我在最開始驗證該種實現(xiàn)時打印的地址是對的,但是之后一段時間就不對了,所以摘出來寫了一個測試代碼。

代碼非常簡單:使用using std::function的方式定義一個函數(shù)指針類型func_t,然后實現(xiàn)三個print函數(shù),在main函數(shù)中定義一個vector存放三個函數(shù)的地址,打印三個函數(shù)的實際地址,之后遍歷vector打印存放的元素值。


#include <iostream>
#include <vector>
#include <functional>

// 定義 std::function 類型的函數(shù)指針別名
using func_t = std::function<void(int, void*, size_t, size_t, void*)>;

// 示例函數(shù)
void print(int x, void* y, size_t a, size_t b, void* c) {
    std::cout << "print hello\n";
}

void print1(int x, void* y, size_t a, size_t b, void* c) {
    std::cout << "print1 hello\n";
}

void print2(int x, void* y, size_t a, size_t b, void* c) {
    std::cout << "print2 hello\n";
}

int main() {
    // 創(chuàng)建一個存儲 std::function 類型的函數(shù)指針對象的 std::vector
    std::vector<func_t> vec;

    // 使用 push_back 將函數(shù)指針對象添加到 std::vector 中
    vec.push_back(print);
    vec.push_back(print1);
    vec.push_back(print2);

    printf("%x, %x, %x\n", print, print1, print2);

    // 遍歷 std::vector 并依次調(diào)用存儲的函數(shù)指針對象
    for (const auto& func : vec) {
        // 調(diào)用函數(shù)指針對象
        //func(0, nullptr, 0, 0, nullptr);
        printf("%x.\n", func);
    }

    return 0;
}

執(zhí)行后的結(jié)果:

我最開始的理解是vector內(nèi)部存放的地址就是三個函數(shù)的地址。結(jié)果打印的結(jié)果意料之外啊,居然一樣,我嘗試在for循環(huán)遍歷時執(zhí)行該地址函數(shù),結(jié)果還能正常運行。最開始以為是vector遍歷取值的問題,后來經(jīng)過一番驗證沒問題,最后鎖定要函數(shù)指針定義上。

我嘗試切換一種函數(shù)指針定義,使用我最原始的方式:

// 定義 std::function 類型的函數(shù)指針別名
//using func_t = std::function<void(int, void*, size_t, size_t, void*)>;
using func_t = void (*)(int, void*, size_t, size_t, void*);

運行后發(fā)現(xiàn)這次是對的了:

最后經(jīng)過一番查找,得出結(jié)論如下:

實際上,std::function 存儲函數(shù)指針時,不直接存儲函數(shù)指針本身的地址,而是存儲了函數(shù)指針對象的一些信息,因此直接使用 %x 來打印 std::function 存儲的函數(shù)指針可能無法獲得正確的地址。

在標(biāo)準(zhǔn)庫 中,std::function 是一個函數(shù)包裝器,它可以包含各種可調(diào)用對象(函數(shù)指針、函數(shù)對象、成員函數(shù)指針、Lambda 表達(dá)式等)。因此,std::function 內(nèi)部存儲了被包裝對象的地址以及其他信息,而不是直接將被包裝對象的地址暴露給用戶。

由于 std::function 對象的內(nèi)部結(jié)構(gòu)不同于原始函數(shù)指針, std::function 對象存儲了更多的信息,所以直接打印 std::function 對象的地址并不會得到和原始函數(shù)指針相同的值,打印它的地址并不等同于打印函數(shù)指針的地址。

所以,如果需要存儲函數(shù)指針并在之后通過 std::function 來調(diào)用它們,可以直接通過 std::function 來調(diào)用并且可以得到預(yù)期的結(jié)果,但是打印地址是不保證能夠得到和原始函數(shù)指針相同的地址(這也是我遇到了幾次和原始函數(shù)指針一致的時候,這也是造成我更迷茫的原因)。

那為什么打印的值一樣呢?

因為在遍歷 std::vector<std::function> 時,即使它們指向不同的函數(shù),它們的內(nèi)部指針值可能是相同的,這是因為 std::function 可以包裝不同的可調(diào)用對象,但它們內(nèi)部可能使用相同的機制來存儲函數(shù)指針或者函數(shù)對象的地址。因此,打印 std::function 內(nèi)部存儲的函數(shù)指針值可能會得到相同的結(jié)果。但這不應(yīng)該影響 std::function 執(zhí)行其持有的不同函數(shù)的能力。

總結(jié)

如果你也需要直接獲取存儲的函數(shù)指針的地址(C語言的習(xí)慣),最好還是直接使用原始的函數(shù)指針,而不是通過 std::function 來存儲和獲取函數(shù)指針的地址。

責(zé)任編輯:趙寧寧 來源: 囧囧妹
相關(guān)推薦

2021-06-16 17:46:55

函數(shù)指針結(jié)構(gòu)

2011-04-11 14:18:37

CC++指針

2023-11-21 21:59:50

c++接口

2023-11-22 13:22:51

C++函數(shù)

2011-04-11 11:09:50

this指針

2024-07-03 12:04:42

C++this?

2021-05-28 18:12:51

C++設(shè)計

2021-06-18 12:30:36

C++函數(shù)指針編程語言

2011-07-20 17:54:02

C++

2014-01-24 09:49:01

C++指針

2011-07-14 17:02:09

C++指針

2024-05-15 16:01:04

C++編程開發(fā)

2021-01-13 06:58:35

C語言函數(shù)指針

2025-05-20 08:10:00

函數(shù)函數(shù)類型函數(shù)指針類型

2010-01-18 15:53:27

C++析構(gòu)函數(shù)

2018-01-29 21:56:28

Bug程序程序員

2010-02-06 09:31:42

C++函數(shù)對象

2011-04-19 16:38:00

對象指針指針C++

2011-07-15 01:38:56

C++this指針

2011-04-19 09:19:09

C++指針
點贊
收藏

51CTO技術(shù)棧公眾號

aa视频在线免费观看| 天堂av在线网站| 无码人妻一区二区三区免费| 欧洲精品99毛片免费高清观看| 91看片淫黄大片一级在线观看| 久久亚洲影音av资源网| 国产精品一区二区羞羞答答| 日本激情一区二区| 欧美三级视频| 9191精品国产综合久久久久久| 欧美精品七区| 中文字幕高清在线免费播放| 国产精伦一区二区三区| 亚洲激情男女视频| 99c视频在线| 91麻豆免费视频网站| 57pao成人永久免费| 国产欧美1区2区3区| 热草久综合在线| www.久久av| 亚洲精品一区| 国产拍揄自揄精品视频麻豆| 国产va免费精品高清在线观看| 日韩免费高清一区二区| а√天堂中文资源在线bt| 国产精品亚洲а∨天堂免在线| 色视频www在线播放国产成人| 国产第一页视频| 国产系列在线观看| 免费不卡在线观看| 久久色免费在线视频| 樱花草www在线| 午夜av在线免费观看| 成人在线视频一区二区| 久久久久在线观看| 野花社区视频在线观看| 黑人巨大精品欧美一区二区桃花岛| 99久久免费精品| 日韩免费视频在线观看| 少妇无套高潮一二三区| 欧美三级电影网址| 一区二区三区四区亚洲| 国产精品二区在线观看| 制服.丝袜.亚洲.中文.综合懂色| 九九在线高清精品视频| 欧美日韩国产在线观看| 欧美与动交zoz0z| 手机看片1024日韩| 日本视频中文字幕一区二区三区| 日韩在线观看你懂的| 女王人厕视频2ⅴk| 国产无遮挡裸体视频在线观看| 久久久亚洲欧洲日产国码αv| 国产精品第2页| 欧美黑人性猛交xxx| 国产精品色在线网站| 色综合久久六月婷婷中文字幕| 日韩免费电影一区二区| 国产精品毛片一区视频播| 亚洲性图久久| 在线看欧美日韩| 日韩精品国产一区| 亚洲第一会所001| 亚洲自拍偷拍麻豆| 亚洲不卡1区| 国产精品一级视频| 亚洲尤物影院| 久久影视电视剧免费网站| www.88av| 国产精品视频首页| 91久久精品国产91性色tv| 9l视频自拍9l视频自拍| 色视频精品视频在线观看| 国产一区二区三区免费看| 一区在线免费观看| 欧美精品乱码视频一二专区| 国产在线观看免费网站| 极品少妇xxxx精品少妇| 午夜精品福利在线观看| 欧美一区二区三区观看| 麻豆成人入口| 777a∨成人精品桃花网| 国产男女在线观看| 美女航空一级毛片在线播放| 国产精品三级在线观看| 精品欧美一区二区久久久伦| 99精品在线看| 日本不卡123| 欧美一级高清免费播放| 欧美国产日韩综合| av大片在线| 希岛爱理av免费一区二区| 91精品国产全国免费观看| 少妇性l交大片| 国产伦精品一区三区精东| 久久精品99国产精品酒店日本| 国产免费一区二区三区在线能观看| 日韩免费黄色片| 91精品国产成人观看| 亚洲午夜未满十八勿入免费观看全集| 精品人妻伦一二三区久| 国产天堂在线| 成人a'v在线播放| 亚洲免费高清视频| 亚洲一区二区在线免费| 99精品国产一区二区三区2021| 91麻豆精品国产91久久久久久久久| 日本成人在线免费视频| 伊人久久视频| 欧美午夜激情视频| 久久婷婷国产精品| 伊人久久精品一区二区三区| 欧美午夜片欧美片在线观看| 精品视频免费在线播放| 国产亚洲成av人片在线观看| 午夜电影网亚洲视频| 99色这里只有精品| caoporn视频在线| 欧美日韩国产一区中文午夜| 男女私大尺度视频| 2018av在线| 欧美日韩精品在线视频| 国模吧无码一区二区三区| 99riav视频在线观看| 亚洲一区二区av电影| av免费看网址| 亚洲精华液一区二区三区| 欧美日韩在线视频观看| 亚洲男人天堂色| 91女人18毛片水多国产| 亚洲精品97久久中文字幕无码 | 色94色欧美sute亚洲13| 国产男女激情视频| 高清av一区| 欧美高清一级片在线| 欧美熟妇另类久久久久久多毛| 精品一区二区三区在线观看视频| 日韩欧美国产高清| 亚洲一区二区三区无码久久| 制服丝袜日韩| 久久精品久久久久久| 九九九免费视频| 亚洲欧美日韩精品一区二区 | 天堂精品在线视频| 精品成人在线观看| 亚洲人成人无码网www国产| 成人看的羞羞网站| 久久成人18免费网站| 日本少妇性生活| 日韩专区欧美专区| 成人av片网址| 黄色小视频在线观看| 国产精品国产自产拍高清av王其| 国产91porn| 欧美特大特白屁股xxxx| 91精品久久久久久久99蜜桃| 国产chinese中国hdxxxx| 国内精品久久久久久久影视简单 | av激情在线观看| 国产一区91| 久久精品午夜| 国产乱子轮精品视频| av蓝导航精品导航| 内衣办公室在线| 国产主播一区二区| 6080yy午夜一二三区久久| 亚洲第一区第二区第三区| 精品少妇3p| 久久精品免费播放| 五月激情六月丁香| 国产精品自产自拍| 日本一区二区三区免费观看| 婷婷在线播放| 欧美在线免费观看视频| 中文字幕无人区二| 日韩www.| 青青草成人在线| 丰满人妻一区二区三区免费| 中文字幕巨乱亚洲| 欧美亚洲另类色图| heyzo欧美激情| 日韩中文字幕精品| 青青国产在线视频| 91免费小视频| 黄色一级在线视频| 亚洲网址在线观看| 久久精品国产v日韩v亚洲| 亚洲天堂一区在线| 成人动漫在线一区| 99热这里只有精品免费| 日韩美香港a一级毛片| 亚洲欧美制服第一页| 免费看日韩毛片| 成人久久18免费网站麻豆| 欧美精品一区二区性色a+v| 精品美女一区| 国产亚洲欧美日韩精品| www.久久久久久久| 91丝袜呻吟高潮美腿白嫩在线观看| 中文字幕在线中文| 国产欧美日韩电影| 久久亚洲精品一区| 国产丰满美女做爰| 亚洲欧美aⅴ...| 图片区乱熟图片区亚洲| 日韩理论电影院| 国产精品久久久亚洲| 成人影院免费观看| 秋霞成人影院| 国产999精品久久| 亚洲AV无码成人精品一区| 日韩av超清在线观看| 亚洲男人第一网站| 日韩电影在线观看一区二区| 26uuu国产电影一区二区| 久久久999免费视频| 国产欧美啪啪| 97免费在线视频| 日韩a在线看| 日韩欧美在线网址 | 91香蕉在线视频| 99久久国产免费看| 欧美性大战久久久久xxx | 日韩精品日韩在线观看| 五月天综合激情网| 久久久久国产精品人| 不卡av免费在线| 久久大综合网| 97超碰人人看人人| 啊啊啊久久久| 亚洲欧美日韩中文视频| 超碰在线免费97| 亚洲欧美一区二区三区久本道91| 尤物网站在线看| 99精品视频免费观看视频| 欧美xxxx黑人又粗又长密月| 欧美成人三级| 欧美高清视频在线| 色就是色亚洲色图| 欧美日韩精品欧美日韩精品| 欧美交换国产一区内射| 91在线观看视频| 91极品尤物在线播放国产| 亚洲午夜精品一区 二区 三区| 不卡一区二区三区四区五区| 亚洲女同av| 久久精品亚洲国产| 蜜臀av午夜精品| 欧美性生活久久| 免费在线观看黄视频| 久久久久久夜精品精品免费| 污网站在线免费| 亚洲精品字幕| 在线视频亚洲自拍| 另类春色校园亚洲| 成人看片人aa| 亚洲插插视频| 久久国产精品久久久久久久久久| 午夜影院在线视频| 欧美高清视频不卡网| 天堂中文字幕在线观看| 亚洲另类中文字| 在线小视频你懂的| 成人一区二区三区视频| 中文字幕国内自拍| 日韩亚洲精品在线| 免费成人进口网站| 精品国产一区一区二区三亚瑟| 91黄色精品| 日韩另类视频| 992tv成人免费影院| 黄网页免费在线观看| 亚洲天堂av在线免费| 欧美 日韩 国产 成人 在线| 欧美日韩亚洲综合一区| 欧美亚洲精品天堂| 一区二区三区在线免费播放| 秋霞网一区二区三区| 91美女视频网站| 极品白嫩少妇无套内谢| 久久99精品久久久久久动态图| 日韩黄色片视频| 在线日韩中文| 精品国产三级a∨在线| 欧洲三级视频| 久久久一本精品99久久精品| 亚洲不卡视频| 91色视频在线观看| 日韩电影精品| 国产精品高清网站| 成人va天堂| 国产xxx69麻豆国语对白| 英国三级经典在线观看| 久久久亚洲欧洲日产国码aⅴ| 中文字幕在线观看网站| 久久精品国产精品| 日本a在线播放| 日韩在线精品视频| 在线视频婷婷| 中文字幕在线观看日韩| 成人福利在线| 夜夜嗨av色综合久久久综合网| 日韩av高清在线| 日韩精品高清视频| 飘雪影院手机免费高清版在线观看| 亚洲黄色av网站| 婷婷在线免费观看| 亚洲国产高清福利视频| 国模私拍视频在线| 亚洲第一视频在线观看| 丰满人妻妇伦又伦精品国产| 精品1区2区在线观看| 免费观看黄一级视频| 精品国产一区二区三区av性色| www.国产三级| 亚洲成色777777女色窝| 人人妻人人澡人人爽久久av| 亚洲成人动漫在线播放| 天堂中文在线资源| 日韩黄色高清视频| 黄视频在线观看免费| 国产亚洲欧美日韩美女| 午夜小视频在线| 欧美成人一区二区三区电影| 国模雨婷捆绑高清在线| 97精品国产97久久久久久免费| 欧美激情护士| 国产精品普通话| 国产一区一区| 久久精品ww人人做人人爽| 国产欧美一区二区精品久久久| 日韩视频在线播放| 我不卡影院28| 亚洲精品无码国产| 西西人体一区二区| 成人性生交免费看| 国产91精品一区二区| 37p粉嫩大胆色噜噜噜| 中文无字幕一区二区三区| 久久国产精品国语对白| 亚洲无人区一区| 中文字幕免费观看| 91精品国产一区二区三区| 色婷婷视频在线| 色小说视频一区| 男人添女人下部高潮视频在线观看| 97超碰色婷婷| 亚洲爽爆av| 久久国产精品久久精品国产| 久久综合国产| 国产欧美日韩网站| 美日韩一区二区| 中文字幕乱码在线| 一区在线观看免费| 亚洲男人的天堂在线视频| 欧美日韩aaaaaa| 五月天福利视频| 久久成人精品电影| 日本精品网站| 精品一区二区视频| 综合激情网站| 苍井空浴缸大战猛男120分钟| 国产精品综合视频| 99精品欧美一区二区| 午夜久久久久久| 国产人妖一区二区| 亚洲精品之草原avav久久| 在线观看免费视频你懂的| 国产精品福利网| 老司机在线精品视频| 91精品国产吴梦梦| 免费观看30秒视频久久| 欧美 日本 国产| 亚洲国产精品嫩草影院| 亚洲中文字幕在线一区| 日韩精品欧美激情| 免费在线观看的电影网站| 国产精品香蕉av| 美女亚洲一区| 欧美成人三级在线视频| 国产精选一区二区三区| 国产黄色录像片| 色猫猫国产区一区二在线视频| 天堂网在线播放| 欧美多人乱p欧美4p久久| 亚洲精品三区| 婷婷久久青草热一区二区| 亚洲影院免费| 在线免费播放av| 亚洲一区二区四区蜜桃| 国产丰满美女做爰| 久久精品男人天堂| 亚洲国产91视频| 一区二区三区精品国产| 视频一区二区欧美| 亚洲精品乱码久久久久久久久久久久| 亚洲第一主播视频| 国产 日韩 欧美 精品| 久久亚洲一区二区三区四区五区高| 成人全视频免费观看在线看|