最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

關(guān)于c++initializer_list和T數(shù)組的轉(zhuǎn)換

2023-02-19 22:07 作者:呼喚伙伴的小金魚  | 我要投稿

眾所周知,initalizer_list實(shí)際上的內(nèi)存使用部分只有兩個(gè),一個(gè)指針,一個(gè)長(zhǎng)度,源碼如下:

template<class _E>

? ? class initializer_list

? ? {

? ? private:

? ? ? const _E*?_M_array;

? ? ? size_t? ?_M_len;

? ? ? // The compiler can call a private constructor.

? ? ? constexpr initializer_list(const_iterator __a, size_type __l)

? ? ? : _M_array(__a), _M_len(__l) { }

? ? };

而一個(gè)指針加一個(gè)長(zhǎng)度的構(gòu)造函數(shù)已經(jīng)私有化,調(diào)用不了了,也沒(méi)有相應(yīng)的賦值函數(shù)。

看似不能用一個(gè)指針+一個(gè)長(zhǎng)度來(lái)構(gòu)造對(duì)象了。

可是,確實(shí)如此嗎?

在這里,定義了一個(gè)長(zhǎng)度為n的數(shù)組a,如何將數(shù)組a賦值給一個(gè)initializer_list?

似乎沒(méi)有辦法對(duì)吧?

但是initializer_list本身的有效內(nèi)存存儲(chǔ)只有指針+長(zhǎng)度,類似與pair<T,size_t>,

而pair實(shí)際上的有效內(nèi)存如下:

struct pair

? ? {

? ? ? typedef _T1 first_type;?

? ? ? typedef _T2 second_type;?

? ? pair(const _T1& __a, const _T2& __b)

? ? ? : first(__a), second(__b) { }

};

而眾所周知,memcpy,定義在string.h中,可以通過(guò)指針無(wú)差別內(nèi)存拷貝

所以,思路不就有了嗎——

template<class t>

void func(initializer_list<t>&lis,t*a,size_t n){

pair<const t*,size_t>ass(a,n);

memcpy(&lis,&ass,sizeof(ass));

}

這個(gè)函數(shù)可以實(shí)現(xiàn)數(shù)組轉(zhuǎn)initializer_list

關(guān)于c++initializer_list和T數(shù)組的轉(zhuǎn)換的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
威海市| 浏阳市| 郴州市| 波密县| 铜陵市| 雷波县| 葵青区| 晋中市| 公主岭市| 怀宁县| 和田县| 平顺县| 孙吴县| 南陵县| 开封市| 福清市| 诏安县| 宝应县| 邳州市| 庆安县| 绥滨县| 三河市| 油尖旺区| 香河县| 二连浩特市| 四平市| 顺义区| 博客| 呈贡县| 鄂州市| 扬州市| 溧阳市| 正镶白旗| 二连浩特市| 黑龙江省| 如皋市| 东乡族自治县| 玉屏| 中方县| 阿鲁科尔沁旗| 公主岭市|