欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++?std::copy與memcpy區(qū)別小結(jié)

 更新時(shí)間:2024年05月08日 08:31:10   作者:魔法自動(dòng)機(jī)  
本文主要介紹了C++?std::copy與memcpy區(qū)別小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言:最近在讀項(xiàng)目源碼,發(fā)現(xiàn)有些地方用std::copy,有些地方用memcpy。但是并不知道為什么要這樣,但是原作者也不認(rèn)識(shí),就只好自己研究一下了。

對(duì)比

相同:

  • 都是復(fù)制拷貝函數(shù)。
  • 都是通過(guò)指針操作進(jìn)行內(nèi)存復(fù)制。

不同:

  • std::copy是C++中的函數(shù),memcpy是C中的函數(shù)。
  • std::copy更加靈活,可以在不同類型的對(duì)象之間進(jìn)行復(fù)制;memcpy只能用于字節(jié)級(jí)別的復(fù)制,不能處理自定義類型。
  • std::copy拷貝類的時(shí)候,會(huì)調(diào)用貝構(gòu)造函數(shù)或賦值運(yùn)算符來(lái)復(fù)制;memcpy只會(huì)按字節(jié)復(fù)制,不會(huì)調(diào)用類的任何成員函數(shù)。
  • std::copy的性能比memcpy會(huì)更好

使用場(chǎng)景

從兩者的不同點(diǎn)就可以看的出來(lái),大致使用場(chǎng)景的區(qū)別了。

適合std::copy:

  • 處理非平凡類型,使用memcpy會(huì)導(dǎo)致未定義行為,std::copy能確保處理正確的生命周期。
  • 對(duì)于結(jié)構(gòu)體或者類中有指針成員變量的情況,memcpy進(jìn)行拷貝只是進(jìn)行了淺拷貝,會(huì)導(dǎo)致指針成員變量的指向不正確,從而導(dǎo)致未定義行為。
  • 當(dāng)源和目標(biāo)內(nèi)存區(qū)域有重疊的時(shí)候。

適合memcpy:

  • 對(duì)于簡(jiǎn)單數(shù)據(jù)類型(例如int、char、float等基本的類型),使用memcpy而不是std::copy。
  • 當(dāng)源和目標(biāo)內(nèi)存區(qū)域沒(méi)有重疊,memcpy可以直接位拷貝,不會(huì)涉及迭代器和復(fù)制構(gòu)造函數(shù)等操作。

總結(jié)以下,C++才加入的類型或者自行定義的類型、涉及深拷貝、源和目標(biāo)內(nèi)存區(qū)域有重疊的時(shí)候適合std::copy,其它時(shí)候用memcpy好點(diǎn)。

補(bǔ)充:平凡類型trivial和非平凡類型non-trivial。
這個(gè)主要是針對(duì)類中的四個(gè)函數(shù)來(lái)說(shuō)的:構(gòu)造函數(shù)、復(fù)制構(gòu)造函數(shù)、賦值函數(shù)以及析構(gòu)函數(shù)。
如果滿足以下三點(diǎn)任意一點(diǎn),就是非平凡類型non-trivial:

  • 顯式定義了上面四種函數(shù)。
  • 類里面有非靜態(tài)非POD的成員(POD可以理解為包含平凡類、標(biāo)準(zhǔn)布局類)。
  • 有基類。

使用

std::copy

把src里面的內(nèi)容復(fù)制到dst。

vector<int>src= { 0, 1, 2, 3, 4 };
vector<int>dst(5, 0);
std::copy(src.begin(), src.end(),dst.begin());// src起始地址,src末尾下一個(gè),dst起始地址

memcpy

因?yàn)閙emcpy是C那邊的,所以用vector不太合適,適合簡(jiǎn)單的數(shù)據(jù)類型。

const char src[50] = "http://www.runoob.com";
char dst[50];
// strlen(src)不包括結(jié)束符
memcpy(dst, src, strlen(src)+1);// dst起始地址,src起始地址,復(fù)制長(zhǎng)度

到此這篇關(guān)于C++ std::copy與memcpy區(qū)別小結(jié)的文章就介紹到這了,更多相關(guān)C++ std::copy memcpy內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Qt實(shí)現(xiàn)自定義日志類的示例代碼

    Qt實(shí)現(xiàn)自定義日志類的示例代碼

    這篇文章主要為大家詳細(xì)介紹了使用 qInstallMessageHandler() 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的日志工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下
    2023-12-12
  • C++實(shí)現(xiàn)從數(shù)組中同時(shí)取出最大最小元素算法示例

    C++實(shí)現(xiàn)從數(shù)組中同時(shí)取出最大最小元素算法示例

    這篇文章主要介紹了C++實(shí)現(xiàn)從數(shù)組中同時(shí)取出最大最小元素算法,結(jié)合具體實(shí)例形式分析了C++通過(guò)數(shù)組的遍歷、排序獲取最大與最小元素的相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • Vs2022環(huán)境下安裝低版本.net framework的實(shí)現(xiàn)步驟

    Vs2022環(huán)境下安裝低版本.net framework的實(shí)現(xiàn)步驟

    本文主要介紹了Vs2022環(huán)境下安裝低版本.net framework的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • C++中四種強(qiáng)制轉(zhuǎn)換方式的區(qū)別

    C++中四種強(qiáng)制轉(zhuǎn)換方式的區(qū)別

    在C++中,有四種不同的強(qiáng)制轉(zhuǎn)換方式,它們分別是靜態(tài)轉(zhuǎn)換、動(dòng)態(tài)轉(zhuǎn)換、常量轉(zhuǎn)換和重新解釋轉(zhuǎn)換,下面通過(guò)示例代碼講解每種轉(zhuǎn)換的區(qū)別,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • C語(yǔ)言中.c和.h文件區(qū)別講解

    C語(yǔ)言中.c和.h文件區(qū)別講解

    這篇文章主要介紹了C語(yǔ)言中.c和.h文件區(qū)別講解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是本文的詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++數(shù)字三角形問(wèn)題與dp算法

    C++數(shù)字三角形問(wèn)題與dp算法

    這篇文章主要介紹了C++數(shù)字三角形問(wèn)題與dp算法的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2018-09-09
  • C++ 二叉樹的鏡像實(shí)例詳解

    C++ 二叉樹的鏡像實(shí)例詳解

    這篇文章主要介紹了C++ 二叉樹的鏡像實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Linux vmstat命令實(shí)戰(zhàn)詳細(xì)解析

    Linux vmstat命令實(shí)戰(zhàn)詳細(xì)解析

    這個(gè)命令是我查看Linux/Unix最喜愛(ài)的命令,一個(gè)是Linux/Unix都支持,二是相比top,我可以看到整個(gè)機(jī)器的CPU,內(nèi)存,IO的使用情況,而不是單單看到各個(gè)進(jìn)程的CPU使用率和內(nèi)存使用率(使用場(chǎng)景不一樣)
    2013-09-09
  • 通過(guò)代碼實(shí)例解析c++ vector常用方法

    通過(guò)代碼實(shí)例解析c++ vector常用方法

    這篇文章主要介紹了通過(guò)代碼實(shí)例解析c++ vector常用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • C++右值引用問(wèn)題解決

    C++右值引用問(wèn)題解決

    本文主要介紹了C++右值引用問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06

最新評(píng)論