精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

国语精品免费视频| 91黑丝高跟在线| www.污网站| a国产在线视频| 国产日韩欧美不卡| 91免费的视频在线播放| 日韩欧美亚洲一区二区三区| gogogo高清在线观看一区二区| 欧美一级一区二区| 北条麻妃在线一区| 欧美6一10sex性hd| 中文字幕免费在线观看视频一区| 99视频在线播放| 成人毛片一区二区三区| 国产精品啊v在线| 中文在线不卡视频| 黄色国产在线观看| 日本免费精品| 在线看国产日韩| 精品国产一区二区三区无码| 888av在线| 91在线免费视频观看| 亚洲一区制服诱惑| 色婷婷久久综合中文久久蜜桃av| 亚洲日本欧美| 欧美理论电影在线观看| 青青草自拍偷拍| 久草成人资源| 亚洲精品999| 久久黄色一级视频| 亚洲男男av| 欧美日免费三级在线| 国产成人精品视频免费看| 先锋影音在线资源站91| 中文字幕一区二区在线观看| 欧洲av一区| 亚洲三区在线播放| 成人美女视频在线看| 亚洲综合中文字幕68页| 一区二区视频网| 日本强好片久久久久久aaa| 91高潮在线观看| 日本三级免费看| 亚洲成人直播| 国模精品视频一区二区| 久久久精品国产sm调教网站| 亚洲国产不卡| 久久这里只有精品99| 婷婷国产成人精品视频| 日韩情爱电影在线观看| 伊人久久综合97精品| 大吊一区二区三区| 色一区二区三区四区| 色噜噜狠狠狠综合曰曰曰| 午夜黄色福利视频| 欧美独立站高清久久| www.欧美精品| 极品魔鬼身材女神啪啪精品| 亚洲一区二区三区| 久久99精品国产99久久6尤物| 欧美极品视频在线观看| 极品裸体白嫩激情啪啪国产精品| 欧美黑人一级爽快片淫片高清| 亚洲国产精品久| 欧美精选一区| 国内精品久久久久久中文字幕| 日韩成年人视频| 新67194成人永久网站| 国产黑人绿帽在线第一区| 久久久久久久亚洲| 精油按摩中文字幕久久| 亚洲一区二区免费在线| 人妻视频一区二区三区| 91麻豆免费观看| 水蜜桃一区二区三区| 激情成人四房播| 亚洲一区在线视频| 欧美牲交a欧美牲交| 在线国产成人影院| 91精品黄色片免费大全| 亚洲婷婷在线观看| 九九视频免费观看视频精品 | 亚洲精华国产精华精华液网站| 国产iv一区二区三区| 精品国产一区二区三区四区vr | 久久九九影视网| 影音先锋亚洲视频| 国产三线在线| 欧美亚洲高清一区二区三区不卡| 天堂在线一区二区三区| 国产美女撒尿一区二区| 在线视频日本亚洲性| 91成人福利视频| 国产精品一页| 亚洲综合社区网| 欧美婷婷久久五月精品三区| 国产精品对白交换视频| 免费拍拍拍网站| av一区在线播放| 精品少妇一区二区三区免费观看 | 国产一区二区在线播放| 高潮毛片7777777毛片| 久久日韩粉嫩一区二区三区| 在线无限看免费粉色视频| 人人草在线视频| 欧美精品乱码久久久久久| 亚洲一区二区三区无码久久| 久久激情电影| 欧美中文字幕在线观看| 国产绳艺sm调教室论坛| 久久久精品日韩欧美| 女人帮男人橹视频播放| 国产日本久久| 国产丝袜高跟一区| wwwav国产| 日本不卡一区二区| 精品国产乱码久久久久| 色噜噜狠狠狠综合欧洲色8| 欧美性xxxxxxxx| 国产又粗又猛又色| 欧美日韩1区| 成人av在线天堂| 嫩草研究院在线观看| 亚洲成人综合在线| 久久久久国产免费| 91久久国产| 国产精品一二三在线| 蜜桃视频在线观看视频| 亚洲国产成人91porn| 中文字幕在线观看日| 欧美老女人另类| 日本久久久久亚洲中字幕| 天天干天天摸天天操| 亚洲免费av高清| 国产成人美女视频| 日韩精品91| 国产精品久久不能| 国产区视频在线| 日本高清无吗v一区| 国产亚洲无码精品| 国产亚洲精品自拍| 精品免费国产| 国产色播av在线| 亚洲国产黄色片| 日韩久久精品视频| 成人国产精品免费观看视频| 欧美一级视频在线播放| a级日韩大片| 久久久久久久久国产精品| 成人午夜免费福利| 亚洲高清三级视频| 奇米777第四色| 亚洲人成毛片在线播放女女| 精品免费视频123区| videos性欧美另类高清| 亚洲天堂影视av| 最好看的日本字幕mv视频大全 | 免看一级a毛片一片成人不卡| 国产乱码字幕精品高清av| 水蜜桃在线免费观看| 亚洲不卡在线| 97精品久久久中文字幕免费| 亚洲欧美丝袜中文综合| 一本久久精品一区二区| 亚洲天堂最新地址| 国产资源精品在线观看| 99热这里只有精品免费| 菁菁伊人国产精品| 欧美一区在线直播| 秋霞影院午夜丰满少妇在线视频| 欧美精品黑人性xxxx| 久久久久成人精品无码| 99久久精品久久久久久清纯| 亚洲 中文字幕 日韩 无码| 色综合色综合| 国产传媒一区| 欧美日韩大片| 久久成人精品一区二区三区| 蜜臀久久久久久999| 一本大道久久a久久精二百| 欧美性猛交xxxx乱大交少妇| 国产成人av在线影院| 国产精品网站免费| 日韩在线欧美| 国产91视觉| 成人开心激情| 九九热视频这里只有精品| 外国精品视频在线观看| 欧美理论片在线| 97人人澡人人爽人人模亚洲| 国产嫩草影院久久久久| 亚洲国产欧美日韩在线| 久久精品国产清高在天天线| 性做爰过程免费播放| 日韩a级大片| 成人天堂噜噜噜| 少妇在线看www| 久久久黄色av| 免费成人av电影| 欧美成人一级视频| 亚洲天堂男人网| 懂色aⅴ精品一区二区三区蜜月| 在线免费看视频| 972aa.com艺术欧美| 男女污污视频网站| 日韩精品免费专区| 亚洲熟妇无码一区二区三区| 日韩国产欧美| 欧美一区国产一区| 欧美aaaaa级| 99久久精品免费看国产四区| 91在线成人| 欧美一乱一性一交一视频| 二区三区在线观看| 国产又粗又猛又黄又爽无遮挡| 亚洲人午夜精品天堂一二香蕉| av av在线| 国产在线精品免费av| 欧洲熟妇精品视频| 亚洲人成人一区二区三区| 亚洲一区 在线播放| 久久中文字幕av| 欧美亚洲一级二级| 欧美天堂社区| 国产成人一区二区三区免费看| 综合久久伊人| 国产精品一二三在线| 美女网站视频一区| 欧美日韩在线一区| 99国产超薄肉色丝袜交足的后果| mm视频在线视频| 欧美国产第二页| 高潮毛片在线观看| 日韩在线视频免费观看高清中文| 你懂的在线视频| 亚洲精品国产精品国自产观看浪潮| 国产特级黄色片| 911精品国产一区二区在线| 亚洲中文无码av在线| 色丁香久综合在线久综合在线观看| 久久视频免费看| 亚洲最大色网站| 欧美日韩一级在线观看| 亚洲欧美电影一区二区| www.97视频| 亚洲欧洲日产国码二区| 国产亚洲精品精品精品| 国产欧美日韩久久| 永久免费av无码网站性色av| 99久久久无码国产精品| 国产精品一级黄片| 国产网红主播福利一区二区| 久久成人激情视频| 中文字幕欧美日韩一区| 久久精品在线观看视频| 亚洲私人黄色宅男| 青青草手机视频在线观看| 亚洲影院理伦片| 黄色一级片免费看| 欧美性xxxx在线播放| 99re国产在线| 欧美日韩国产免费一区二区| 国产巨乳在线观看| 日韩精品一区二区三区视频播放 | 不要播放器的av网站| 久久狠狠婷婷| 亚洲精品www.| 国产成人av影院| av无码av天天av天天爽| 国产欧美日韩卡一| 中文字幕影音先锋| 午夜久久久影院| 涩涩视频在线观看| 日韩午夜激情视频| 五月婷婷深深爱| 中文字幕一精品亚洲无线一区| dy888亚洲精品一区二区三区| 久久久久久久久久久国产| 中文字幕人成乱码在线观看 | 97久久综合区小说区图片区| 国产在线一区二区三区四区| 成人高清电影网站| 国产片侵犯亲女视频播放| 国产美女精品| 午夜视频在线观| 91免费在线看| 五月天av网站| 欧美性xxxx极品hd满灌| 国产农村妇女毛片精品| 亚洲欧美激情视频| 18+激情视频在线| 日本乱人伦a精品| 国产亚洲观看| 欧美精品一区二区三区在线看午夜 | 欧美影视一区二区| 欧美二区不卡| 欧美日韩在线免费播放| 国产成人午夜精品5599| 在线观看日本中文字幕| 亚洲综合成人在线视频| 亚洲中文无码av在线| 亚洲高清福利视频| 麻豆91在线| 奇米4444一区二区三区 | 男人最爱成人网| 中文字幕精品—区二区四季| 欧美在线观看视频免费| 日本中文在线一区| a级一a一级在线观看| 亚洲伦理在线精品| 波多野结衣在线观看视频| 亚洲第一页自拍| 久操视频在线| 国产精品视频99| 免费看av成人| 精品少妇在线视频| 国产黑丝在线一区二区三区| 青青青视频在线播放| 色综合久久88色综合天天免费| 免费av网站在线播放| 欧美人交a欧美精品| 色综合视频一区二区三区日韩| 欧美日本韩国在线| 国产欧美另类| 无码人妻一区二区三区在线| 亚洲欧洲制服丝袜| 亚洲午夜激情视频| 亚洲一级片在线看| 国产精欧美一区二区三区蓝颜男同| 国产精品国产一区二区| 在线一区电影| 99精品视频国产| 中文字幕一区二区三区在线观看 | 日韩成人一级大片| 中文字幕狠狠干| 欧美日韩国产页| 香蕉视频免费在线看| 性色av一区二区咪爱| 97久久亚洲| 免费一级特黄毛片| 不卡的av电影在线观看| 天天操天天爽天天干| 亚洲国产小视频| 英国三级经典在线观看| 欧美国产综合视频| 久久av一区| 白白色免费视频| 在线视频一区二区三| bbbbbbbbbbb在线视频| 国产精品女主播| 日韩成人激情| 午夜啪啪小视频| 亚洲免费在线观看视频| 99在线精品视频免费观看软件| 久久久成人精品视频| 日韩在线精品强乱中文字幕| 伊人久久在线观看| 成人国产视频在线观看| 亚洲日本视频在线观看| 亚洲人线精品午夜| 国产精品第一国产精品| 美国av在线播放| 国产成人99久久亚洲综合精品| 久久精品视频9| 亚洲免费一在线| 丁香久久综合| 国产一级大片免费看| 91在线码无精品| 中文字幕你懂的| 欧美成人午夜视频| 欧美综合自拍| 99视频在线视频| 亚洲男人的天堂在线aⅴ视频| 成人毛片视频免费看| 国产成人精品av在线| 午夜精品一区二区三区国产| 久久久久亚洲av无码网站| 欧美性极品少妇精品网站| av电影在线观看| aa成人免费视频| 亚洲专区免费| 成人一级片免费看| 亚洲第一精品夜夜躁人人爽 | 欧美aaa级片| 日韩亚洲欧美在线观看| 中文字幕21页在线看| 99精品一级欧美片免费播放| 成人精品高清在线| 久久久久久久久久一级| 欧美激情视频一区二区| 国产精品日韩精品中文字幕| 精产国品一二三区| 欧美日韩人人澡狠狠躁视频| 伦xxxx在线| 免费影院在线观看一区| 国产乱子伦视频一区二区三区 | 日韩欧美不卡视频| 少妇av一区二区三区| 狼人天天伊人久久| 国产精品探花在线播放|