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

C++的未來和指針

開發 后端
上周Meeting C++2013結束后,我對C++思考了很多,有一些內容和指針有關。在C++ 11中只對指針進行了小量的更新(引入了nullptr),不過過去幾年中,C++中指針的語義和用法卻發生了很多變化。

上周Meeting C++2013結束后,我對C++思考了很多,有一些內容和指針有關。在C++ 11中只對指針進行了小量的更新(引入了nullptr),不過過去幾年中,C++中指針的語義和用法卻發生了很多變化。

首先,我們從指針的原始意義開始,C++11中簡單如type* pt = nullptr; 這里的指針是C語言中的核心概念,由于C++沒有重新設計指針,據我所知C也沒用更新這部分語義。但是C規范中定義了指針,并給出了在C和C++中使用指 針的指導。事實上,指針是一個指向內存中存儲某個變量的地址。如果你對指針進行解引用操作,就能訪問指針指向的變量。指針實際上是一個基礎變量,它不知道 它所指向的值是否有效,也不能感知其指向的值是否無效。在C語言中,一個指針指向0,說明其不指向任何值,因此也不具有有個有效的值。所有其他指針都應該 指向內存中有意義的地址。但實際上,有些指針沒有正確的初始化,或者干脆越出了應有的范圍。

在C++11中,將指針正確初始化為0的方法是使用關鍵字nullptr。這讓計算機知道該指針當前為空。另外,還有一種常用的方式是將0定義為 NULL或者其他定義或聲明。C++11中使用nullptr統一了這種方式。C++中還引入了引用,它看起來像是變量的別名,其優勢是使用引用的時候必 須先初始化,因此,在引用生命周期起始時需要指向一個有效地址。不過,引用也只是指針的解引用,所以,一旦其引用的變量作用范圍結束,其引用也無效了,使 用指針時,你可以將指針置為0,但是針對引用卻不能這么做。

但是在C++11和在C++11標準之前,一些事情發生了變化,指針是語言的核心概念,但是你在現代化的C++代碼和函數庫中卻很少看到它們。遠在 C++11之前,boost創建了一系列非常有用的智能指針類,針對指針進行了封裝,對其核心機制通過操作符重載。智能指針本身不是一個指針,而是一個棧 上的變量或對象成員。智能指針使用了RAII來解決指針的一些問題,這并不是指針的職責。當在椎中分配內存時,new返回了指向該部分內存的地址,所以每 分配一塊動態內存,就需要使用一個指針,相當于創建對象的一個操作句柄。但是指針僅僅是一個簡單的變量,不知道變量的擁有關系,也不能自動釋放堆上的內存 空間。智能指針擔當了這一角色,擁有指針并在變量超出作用域時自動管理其堆上的值。在棧上的值意味著,一旦相應的棧被銷毀,其管理的堆上的值會被自動釋 放,即使是在發生異常的情況下。

過去的一些年,C++出現了一些不同風格的使用,從使用類的C及大量使用指針,到類似我想Widget和QT這樣面向對象的框架。在過去5-10年 中的形成的一種新樣式被認為是現代C++,一種趨向盡力發掘語言本身擴展能力,并試圖找到不同特性針對不同場合的應用。值得注意的是boost在這一趨勢 中起到了***風范的C++框架。C++標準在設計其標準庫時也借鑒了這一點。與此同時,值語義變得流行起來,并且與move語義成為未來C++一個關鍵點。來自Tony van Eerds在Meeting C++的一份備忘幻燈片引起了我對指針的思考。它有兩列,一個代表引用語義,一個代表值語義,以及其朗朗上口的主題詞:

哦,不!使用指針 vs 哦,不要使用指針!

所以,在C++11或者后續的C++14,使用值語義的趨勢蓋過了使用指針。指針在取后臺還是工作著,不過在新的C++14中,new和 delete都將不能直接使用,new被抽象化為make_shared/make_unique。其內部使用了new,但是返回一個智能指針。 shared_ptr 和 unique_ptr都表現為值語義類型。智能指針同樣在其作用域結束時使用delete釋放內存。這讓我思考,C++中的指針是不是都可以填充不同的 “角色”,或者被替換掉。

繼承和虛擬函數

指針一個非常重要的用途是在繼承中使用指針來指向一系列擁有相同接口的類型值。我想用Shape例子來闡明這一點,這里有一個基類Shape,同時 其含有一個虛擬函數叫area的方法。同時,它還有幾個派生類叫Rectange,Cirecle和Triangle。現在,有一個指針容器(比 如:std::vector<Shape*>)來容納指向不同形狀的對象指針,每個對象都有自己的計算面積方法。這是C++中最常用指針的方 式,尤其是在面向對象時。現在,好消息是,這里同樣支持使用智能指針,當其使用這些智能指針時,內部會進行訪問指針。Boost中甚至還有一個指針容器, 能在清空容器時自動釋放其中的智能指針元素。

現在考慮虛函數調用(這雖然不和指針有直接聯系),虛函數調用通常會有點點慢,同時也不容易編譯器針對其進行優化。所以,如果其類型在運行時是可知 的,就可以使用靜態分發或者編譯器多態性來正確調用相應的虛函數方法,而不是在運行時使用虛函數指針。作為一種模式被叫做CRTP,已經實現了這一方式。 最近的研究顯示,這在gcc4.8中可以提高性能。有趣的是,通常情況下使用gcc4.9,優化器可以針對動態分發進行更進一步的優化。還是讓我們繼續回到指針。

不確定指針

有時候指針被用于有一系列可選值作為參數或者返回不確定的函數中,通常都默認為0,用戶可以選擇傳遞一個有效的指針給該函數。或者在返回的情況下, 函數返回一個空指針表示執行失敗,這在C++中也是一個有效的使用方式。同樣的,這里可以使用智能指針,智能指針可以扮演指針的操作句柄。不過常常會導致 過量使用(使用堆),或者并沒有替代不確定的角色。這需要使用一個可選值類型來代替,用于確定其存儲的值是否有效。Boost庫有一個boost::optional來表示可選值類型。因此,可以考慮在C++14中引入有一個類似的可選類型。所以,現在std::optional會被移入到技術預覽版(TS)中,將來會變成C++14或者C++1y的一部分。

當前的標準庫中已經使用了一些可選類型,比如std::set::insert會返回一個pair<iterator,bool>類 型,其第二個參數表示請求值是否插入到set容器中。容器通常返回尾迭代器來表示無效,但是如果要求返還一個值時,這個角色過去通常都是用指針來表示,指 針為0表示函數執行失敗,因此這里的指針可以被可選類型替代:

  1. optional<MyValue> ov = queryValue(42); 
  2. if(ov) 
  3.   cout << *ov; 
  4. else 
  5.   cerr << "value could not be retrieved"

因此,可選類型和智能指針類型替代了指針的一部分語義,填充了其角色。但是它們是值語義,并大部分都在棧上使用。

有效的指針

在寫作我對C++指針用法的思考時,我主要關注于那些指針可以被其他(比如:智能指針和可選類型等)替換的場景,但是低估了實際上有些場景指針仍然有用。感謝來自reddit,email和社交媒體的一些反饋。

非擁有者指針就是這樣一個例子,這里未來的幾年還是需要使用指針。shard_ptr有對應的weak_ptr,但是unique_ptr沒有對應的伙伴。這里就需要使用非擁有者原始指針。比如,在一個由父和子對象構成的樹或者圖中。但是,未來C++中會新增exempt_ptr來代替。

在處理函數中的傳遞的值時,指針還是具有用處的,Herb Sutter寫了一篇非常好的文章:《GotW about this in May》。Eric Niebler 在他的Meeting C++會議的筆記中也談及了,同時移動語義會影響你應該如何在函數中傳遞或者返回值。

Category

C++11

Input Arguments

 

small/POD/sink

pass by value

all others

pass by const ref

Output

return by value

Input/Output

non const ref / stateful Algorithm Object

這個表格來自 Eric Nieblers 的筆記, 請看幻燈片中的16/31 (建議你閱讀所有的幻燈片)

Eric Niebler說過,在能使用移動語義時盡可能使用移動語義。一個可選參數為例,vector::emplace_back接收一個參數,當其只是將把元 素移動到適當位置,這時你應得使用移動語義。一些輸出參數返回一個值,編譯器可以使用移動語義或者CopyEllision(拷貝去除)的優化技術。針對 一些以對象為輸入/輸出參數,非常引用也是可選擇性優化的,但是Eric在他的筆記中指出:對象算法的狀態在構造函數中應使用槽參數。

在傳遞常量(非常量)引用時,指針可以做同樣的事情,不過有些不同,你需要對指針測試其是否為空。我個人更喜歡在函數/方法或者構造函數時傳遞引用而不是指針。

指針計算

之前我提到過,從我個人的觀點,指針只是一個普通的變量,其值指向一個地址,或者更精確地說,是其指向值得一個地址號碼。這個地址號碼可以被復制, 你可以對其進行加或減法操作。這常常用于遍歷數組或者計算兩個指針的的距離,這在使用數組時很有用。這里對數組的便利其實就是迭代器,所以,在實際代碼 時,指針可以代替迭代器使用。但是,從我多年C++開發經驗來看,我幾乎沒有用到針對指針的計算操作。而且在C++中,指針的計算已經有了非常好的抽象。 我的觀點是,理解指針計算是重要的,這有助于理解代碼中指針的具體作用。

再見,指針?

理論上,C++可以不使用指針,但是由于指針是C/C++語言的核心概念,指針本身仍然會繼續存在。但是它的角色會變更,在你使用C++時,你不再 需要考慮指針。隨著C++的繼續發展,C++11和C++14朝著更抽象,對開發者更友好的方向發展。使用智能指針和可選類型,指針要么被封裝從而更適用 安全的值類型,要么完全被它們替代掉。

原文鏈接:http://www.meetingcpp.com/index.php/br/items/cpp-future-and-the-pointer.html

譯文鏈接:http://blog.jobbole.com/56312/

責任編輯:陳四芳 來源: 伯樂在線
相關推薦

2024-05-15 16:01:04

C++編程開發

2009-09-16 14:56:23

C++

2021-06-10 08:51:57

C++指針聲明指針相關概念

2011-04-11 11:09:50

this指針

2021-12-21 15:31:10

C++語言指針

2023-11-22 13:22:51

C++函數

2010-01-18 15:53:27

C++析構函數

2011-07-13 16:14:53

C++引用指針

2010-01-26 13:42:28

C++指針

2011-04-19 16:38:00

對象指針指針C++

2011-07-15 01:38:56

C++this指針

2011-04-19 09:19:09

C++指針

2024-07-03 12:04:42

C++this?

2021-10-27 16:27:20

C++指針操控

2010-01-28 13:57:19

C++指針基礎

2025-09-25 17:17:06

GoC++指針

2011-07-20 16:43:34

C++

2024-01-09 09:23:12

指針C++

2024-04-10 12:14:36

C++指針算術運算

2011-04-11 14:18:37

CC++指針
點贊
收藏

51CTO技術棧公眾號

欧美www视频| 日本激情一区二区| 在线观看黄av| 欧美三级电影在线| 国产又黄又大久久| 亚洲色图激情小说| 日韩亚洲欧美视频| 国产美女永久免费| 日韩精品诱惑一区?区三区| 午夜精品久久久久久久蜜桃app| 国产日韩精品入口| 国产又黄又粗视频| 精品无人乱码一区二区三区| 不卡一区中文字幕| 欧美国产日韩精品| 成人三级做爰av| 国产日产一区二区| 国产在线精品免费av| 欧美激情videos| 99久久99久久精品免费看小说. | 中文字幕av影院| 伊人精品综合| 一区二区三区成人| 99久久无色码| 精品视频一区二区在线观看| 一区二区三区四区高清视频| 91传媒视频在线播放| 欧洲一区二区日韩在线视频观看免费 | 99精品久久久久久| 久久久亚洲福利精品午夜| 26uuu国产| 福利一区二区免费视频| 国产精品嫩草影院av蜜臀| 国产免费观看久久黄| 娇小11一12╳yⅹ╳毛片| 亚洲国产伊人| 亚洲激情网站免费观看| 国产精品露出视频| 国产尤物在线视频| 欧美精品尤物在线观看| 欧美三级在线播放| 2021国产视频| 手机福利小视频在线播放| 久久天堂精品| 色伦专区97中文字幕| 亚洲视频在线不卡| 久草在线中文最新视频| 国产日韩在线不卡| 成人免费网站在线观看| 清纯粉嫩极品夜夜嗨av| 欧美自拍视频| 亚洲国产精品va在线看黑人| 亚洲午夜无码av毛片久久| 99se视频在线观看| 久久久精品免费网站| 成人激情免费在线| 在线观看国产小视频| 欧美特黄一区| 亚洲日本成人女熟在线观看| 亚洲天堂成人av| 久久99久久久精品欧美| 亚洲制服丝袜av| 日产精品久久久久久久蜜臀| 香蕉视频黄色片| 美女网站在线免费欧美精品| 欧美高清视频在线播放| 国产精品白嫩白嫩大学美女| 美日韩中文字幕| 欧美一区二区视频免费观看| 九九九九免费视频| 中老年在线免费视频| 中文字幕佐山爱一区二区免费| 国产精品视频免费一区| 免费国产黄色片| eeuss国产一区二区三区| 国产精品美女在线观看| 久久精品国产亚洲av无码娇色| 欧美丝袜一区| 亚洲精品99久久久久| 手机免费av片| 韩国成人动漫| 一区二区三区蜜桃网| 蜜臀精品一区二区| 91精品产国品一二三产区| 日本丰满少妇一区二区三区| 91极品尤物在线播放国产| 国产一二在线播放| 亚洲精品国产一区二区精华液 | 免费看黄色aaaaaa 片| 视频一区中文| 操日韩av在线电影| 国产精品成人无码免费| 99久久婷婷| 亚洲色图色老头| 蜜桃视频最新网址| 亚洲国产高清一区| 欧美久久久精品| 久久av红桃一区二区禁漫| 婷婷国产精品| 亚洲成人在线网| 精品一区二区三区蜜桃在线| 亚洲成人一区| 久久亚洲精品网站| 日韩精品一卡二卡| 国产精品v欧美精品v日本精品动漫| 在线成人激情视频| 波多野结衣av在线免费观看| 国产成人高清精品免费5388| 欧美v亚洲v综合ⅴ国产v| 国产在线观看无码免费视频| 国产精品久久久久久久免费观看 | 欧美一区1区三区3区公司 | 97视频在线观看免费| 午夜国产福利一区二区| 久久久久久美女精品| 97久久久久久| 精品国产伦一区二区三| 国产精品一品视频| 亚洲一区精品电影| 国产成人精品一区二区无码呦| 精品一区二区久久久| 国产一区二区在线播放| 色猫av在线| 久久精品日产第一区二区三区高清版| 亚洲天堂av免费在线观看| 91在线看黄| 日韩欧美高清在线视频| 欧美精品成人网| 国产一区二区三区朝在线观看| 欧美一级精品在线| 日韩女优在线视频| 日韩有码中文字幕在线| 成人444kkkk在线观看| 久久久久久久久久成人| 日本不卡一区二区三区| 国产日韩中文字幕| 欧美一区二区视频| 亚洲福利国产精品| 成人在线看视频| 777午夜精品电影免费看| 亚洲国产91色在线| 五月天丁香激情| 国产精品自拍av| 四虎4hu永久免费入口| 2020国产精品小视频| 精品福利一区二区三区免费视频| 国产+高潮+白浆+无码| 九一成人免费视频| 午夜伦理精品一区| 免费看日韩av| 午夜亚洲国产au精品一区二区| 熟妇女人妻丰满少妇中文字幕 | 激情成人开心网| 日本一区影院| 亚洲护士老师的毛茸茸最新章节| 丰满少妇高潮久久三区| 国产精品99久久久久久久女警| 国产美女精品久久久| 成人午夜免费福利| 久久日韩粉嫩一区二区三区| 亚洲欧美久久234| 国产美女一区视频| 欧美色区777第一页| 免费看裸体网站| 蜜桃视频一区二区三区| 亚洲精品欧美精品| 日本欧美在线| 欧美美最猛性xxxxxx| va婷婷在线免费观看| 亚洲一区在线观看免费观看电影高清 | 午夜欧美在线| 亚洲最大成人在线| 91制片在线观看| 91久久人澡人人添人人爽欧美| 成人影视免费观看| 日本大胆欧美人术艺术动态| 在线成人性视频| 忘忧草在线日韩www影院| 日韩精品亚洲精品| 久久精品波多野结衣| 成人小视频在线| 在线视频一区观看| 日韩一区网站| 4438全国亚洲精品在线观看视频| 国产精品污视频| 国产亚洲成年网址在线观看| 亚洲福利精品视频| 欧美日韩国产高清| 美女被啪啪一区二区| 男女在线视频| 56国语精品自产拍在线观看| 少妇大叫太粗太大爽一区二区| 久久一二三四| 神马午夜伦理影院| 性欧美lx╳lx╳| 成人福利在线观看| 欧美sm一区| 日韩专区中文字幕| 中国老头性行为xxxx| 99国内精品久久| 亚洲 欧美 另类人妖| 亚洲国产一区二区精品专区| 色噜噜一区二区| 写真福利精品福利在线观看| 亚洲国产高清福利视频| 亚洲精品一区二三区| 久久色.com| 久久久久亚洲av无码麻豆| 久久精品人人做人人爽电影蜜月| 国模一区二区三区私拍视频| 欧美日韩国产网站| 国产69精品久久久久99| av网站在线免费观看| 精品久久久久久最新网址| 国产成人自拍偷拍| 精品高清一区二区三区| 中国极品少妇videossexhd| 蜜桃一区二区三区在线观看| 2018国产在线| 日本亚洲不卡| 亚洲一区二区三区视频播放| 日韩性xxx| 在线观看日韩视频| 日本加勒比一区| 日韩欧美中文一区二区| 在线视频1卡二卡三卡| 欧美日韩视频免费播放| 中文字幕第20页| 青青青伊人色综合久久| 日韩国产欧美亚洲| 蜜桃成人av| 国产精品永久入口久久久| 国产情侣一区在线| 欧美黑人性猛交| 浪潮av一区| 中文字幕日韩欧美精品在线观看| 亚洲一区中文字幕永久在线| 欧美日韩一二三四五区| 国语对白一区二区| 洋洋成人永久网站入口| 黄色一级片在线免费观看| 亚洲日本一区二区| 欧美激情一区二区三区p站| 久久se精品一区精品二区| 大桥未久一区二区三区| 国产福利资源一区| 国产99在线免费| 成人软件在线观看| 欧美诱惑福利视频| 2022成人影院| 国产成人精品国内自产拍免费看| 日本在线视频观看| 亚洲国产一区自拍| 天堂成人在线观看| 欧美日本乱大交xxxxx| 国产亚洲色婷婷久久99精品| 亚洲另类春色国产| 伊人网伊人影院| 国产激情精品久久久第一区二区 | 国产精品性做久久久久久| 性猛交ⅹ×××乱大交| 欧美激情综合| 国产精品国产三级国产专区51| 亚洲成人一品| 亚洲自拍小视频免费观看| 亚洲成人精品综合在线| 91麻豆国产精品| 不卡av影片| 国产成人精品在线观看| 成人看片网页| 91久久久久久久久久久久久| 伊人久久大香线蕉av超碰| 国产精品加勒比| 亚洲男人都懂第一日本| 天堂社区 天堂综合网 天堂资源最新版 | 午夜亚洲视频| 一区二区在线高清视频| 国产精品x453.com| 欧美亚洲黄色片| 久久久久99| 999这里有精品| 成人免费高清视频| 色噜噜日韩精品欧美一区二区| 欧美国产日韩一二三区| 中文字幕乱码一区| 久久久精品国产免费观看同学| 免费看的黄色录像| 一区二区三区日韩欧美| 中文字字幕在线中文| 亚洲主播在线播放| 亚洲欧美偷拍视频| 6080午夜不卡| 人妻精品一区二区三区| 亚洲视频axxx| 欧美人与性动交α欧美精品图片| 欧洲成人免费aa| 蜜桃视频在线观看播放| 国产精品v日韩精品| 345成人影院| 亚洲a级在线观看| 久久99高清| 久久www视频| 日韩一区精品字幕| 久久久久久久久久久久久久国产| 国内一区二区视频| 色无极影院亚洲| 亚洲综合免费观看高清完整版在线 | 欧美精品导航| 999精品视频在线| 三级久久三级久久久| 天天av天天操| 国产麻豆欧美日韩一区| 中文字幕人妻一区二区| 一级日本不卡的影视| 中文字幕av网站| 亚洲国模精品私拍| 日本大片在线播放| 国产一区二中文字幕在线看| 妖精视频一区二区三区免费观看| 成人毛片100部免费看| 日本成人在线视频网站| 国产一级伦理片| 一区二区三区四区av| 在线观看视频二区| 亚洲天堂男人天堂| 日本美女在线中文版| 68精品久久久久久欧美| 欧美三区四区| 国产在线精品一区二区三区| 先锋资源久久| 向日葵污视频在线观看| 久久综合久久99| 精品成人av一区二区在线播放| 欧美α欧美αv大片| 69成人在线| 国产+人+亚洲| 波多野结衣欧美| 日本不卡在线播放| 国产模特精品视频久久久久| 国产精彩免费视频| 91影院在线观看| 国产精品成人网站| 精品国产91乱码一区二区三区| 色呦呦网站在线观看| 97热精品视频官网| 精品久久ai电影| 视频一区视频二区视频| 欧美亚洲在线| 国产精品扒开腿做爽爽| 日韩欧美精品在线观看| 欧美18xxxxx| 不卡毛片在线看| 国产精品欧美一区二区三区不卡| 中文字幕日韩一区二区三区不卡| 免费高清视频精品| 永久免费看片视频教学| 91精品麻豆日日躁夜夜躁| 2024最新电影在线免费观看| **亚洲第一综合导航网站| 国产成人短视频在线观看| 女同性恋一区二区| 国产盗摄女厕一区二区三区 | 精品福利免费观看| 免费成人av电影| 国产精品丝袜高跟| 亚洲色图欧美| 91视频最新入口| 久久日韩粉嫩一区二区三区| 中文字幕乱伦视频| 337p日本欧洲亚洲大胆精品| 91美女精品| 欧美日韩精品久久久免费观看| 国产精品magnet| 妖精视频一区二区| 亚洲日穴在线视频| 欧美 日韩 国产 精品| 欧美资源在线观看| 99久久激情| 性农村xxxxx小树林| 色婷婷综合中文久久一本| 二区三区在线视频| 欧美一区二区色| 五月久久久综合一区二区小说| 4438x全国最大成人| 欧美性猛交xxxx乱大交极品| eeuss影院在线播放| 日本91av在线播放| 色135综合网| 永久免费未满蜜桃| 欧美亚洲国产一区二区三区va| 人成在线免费视频| 国产一区二区在线播放| 一本色道精品久久一区二区三区 | 精品国产三区在线| 亚洲第一综合| 国产成人av一区二区三区在线| 97精品在线播放| 亚洲丁香久久久| 久久精品嫩草影院| 丰满爆乳一区二区三区|