const 和指針

c++用了那么久,覺得 const 和指針配合到一起的時候就會有點點分不出來。

如下:

const Data* pData;Data const * pDataData * const pDataconst Data * const pData      Data const * const pData

  

是不是有點暈?

我其實用得最多的是 const Data* pData, 也理解該語句是定義 pData指向的對象是不允許修改的(不能通過pData指針調用非const方法)。

那么Data * const pData 實際就是指針本身是不可修改的(你不能將該指針賦值成另一個地址)。

實際上只會出現3中情況.

一種修飾語義是將指針所指向的對象修飾為const.

一種修飾予以是將指針本身(值類型)修飾為const, 本質上像你定義一個 const long 一樣。

最后一種是對象為const 同時指針也為const.

那么,上面那一串代碼都可以對號入座。

簡單的辦法是:

const 關鍵字出現在 * 前面, 修飾的是對象

const 關鍵字出現在 * 后面, 修飾的是指針

好了,再分析之前的例子:

?

const Data* pData;               //修飾對象

Data const * pData               //修飾對象

Data * const pData               //修飾指針const Data * const pData              //修飾對象 + 指針

Data const * const pData              //修飾對象 + 指針

?

所以有那么多種寫法,其實就是在*左邊和右邊的問題。

我們應該始終按自己的風格選擇一種固定模式就好。

?

為什么const 出現在 * 左邊是修飾對象而不是修飾指針

而為什么const 出現在 * 右邊是修飾指針而不是修飾對象

?

要理解這個,需要先理解神射手理論

說有一個神射手,隨意的在槍靶上,每隔1cm的地方打了一個眼。

這個槍靶上居住著一種二維生物。

經過很多該生物的宇宙年后,該生物中的科學家終于發明了太空飛船,開始探索自己的宇宙。

最后他們總結出他們的宇宙第一定律,就是每隔1cm的地方有個洞。

?

哈哈, 我忘記我是在哪看到這個段子的了,是3T還是BigBang. 但是我在思考const 為啥放左邊表示修飾對象的時候想起這個故事來著。

不要在意這些細節,我真是一個很會自娛自樂的人。

轉載于:https://www.cnblogs.com/BearOcean/p/4298227.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375285.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375285.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375285.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux 查看系統用戶的登錄日志

查看用戶登錄系統的日志有兩類日志記錄用戶登錄的行為,一是記錄登錄者的數據,一個是記錄用戶的登錄時間一,記錄用戶登錄數據/var/log/wtmp日志文件記錄用戶登錄的數據。但這個文件是被編碼的文件,不能直接用vi、cat等命令查看&…

Android -- 自定義權限

在android系統的安全模型中,應用程序在默認的情況下不可以執行任何對其他應用程序,系統或者用戶帶來負面影響的操作。如果應用需要執行某些操作,就需要聲明使用這個操作對應的權限。 (在manifest文件中 添加標記)。 ap…

Win32 路徑操作API

路徑操作相關API 路徑截斷與合并函數 PathRemoveArgs 去除路徑的參數 PathRemoveBackslash 去除路徑最后的反斜杠“\” PathAddBackslash 在路徑最后加上反斜杠“\” PathRemoveBlanks 去除路徑前后的空格 PathAddExtension 在文件路徑后面加上擴展名 Pa…

dbms_output.put_line長度限制問題

dbms_output.put_line長度限制問題對于10g以上版本(包括10g), dbms_output.put_line的最大長度限制是32767. 如果報錯buffer overflow, 執行如下語句即可:set serveroutput ON SIZE UNLIMITED FORMAT WORD_WRAPPED對于10g以下版本dbms_output.put_line最大長度限制是255.轉載于…

js深入研究之Person類案例

<script type"text/javascript"> /* 定義一個Person類 */ function Person(name, age) {this.name name;this.age age; } /* 添加兩個方法getName getAge */ Person.prototype {getName: function() {return this.name;},getAge: function() {return this.a…

C++名稱粉碎

C name mangling 1: ?0: 構造器&#xff0c;?1 析構器 2: QAE: public __thiscall AAE: private __thiscall QBE: public __thiscall const 3: 返回值和參數類型 B&#xff1a;const D&#xff1a;char E&#xff1a;unsigned char F&#xff1a;…

一款基于css3鼠標經過圓形旋轉特效

今天給大家分享一款基于css3鼠標經過圓形旋轉特效。當鼠標經過的時候圖片邊框顏色旋轉&#xff0c;圖片顯示詳情。該實例適用瀏覽器&#xff1a;IE8、360、FireFox、Chrome、Safari、Opera、傲游、搜狗、世界之窗。效果圖如下&#xff1a; 在線預覽 源碼下載 實現的代碼。 ht…

Delphi與Windows 7下的用戶賬戶控制(UAC)機制

WIN7/WIN8/WIN10, Vista提供的UAC機制&#xff0c;它的主要目的是防止對于操作系統本身的惡意修改。 對于Delphi程序的影響&#xff0c;UAC主要在于以下幾點&#xff1a; 1、由于UAC機制&#xff0c;Delphi對于系統的操作可能無聲的失敗&#xff0c;而同樣的程序&#xff0c;在…

[轉]深入理解Java 8 Lambda(類庫篇——Streams API,Collectors和并行)

以下內容轉自&#xff1a; 作者&#xff1a;Lucida 微博&#xff1a;peng_gong 豆瓣&#xff1a;figure9 原文鏈接&#xff1a;http://zh.lucida.me/blog/java-8-lambdas-insideout-library-features 本文謝絕轉載&#xff0c;如需轉載需征得作者本人同意&#xff0c;謝謝。 --…

Eclipse生成jar包

前言: 本宅因為要寫XXX軟件的一個插件,來用用java,接觸3天后 在打jar包上卡住了..... 經過大量的百度搜索后有如下幾種解決方案: 解決方案: 一.安裝Fatjar 在線安裝地址:http://kurucz-grafika.de/fatjar 悲劇的是我怎么也安裝不上去,于是放棄(在線下載包什么 我的Eclipse版…

Buffer和Cache的區別

現在不都是只有page cache了嗎&#xff1f; buffer pages其實也是page cache里面的頁。只是多了一層抽象&#xff0c;通過buffer_head來進行一些訪問管理對,從Linux算法實現的角度&#xff0c;page cache和buffer cache目前是一樣的&#xff0c;但是從功能抽象和具體應用來講&a…

Android刷機

這里也有一篇比較詳細的 http://blog.csdn.net/qq1084283172/article/details/52334452 官網刷機包 https://developers.google.com/android/images#hammerhead 我的機器是Nexus 5 一. 安裝驅動 如何進入fastboot模式 1. 拔掉數據線&#xff0c;將手機關機 2. 關機后同時按…

中西醫與算法之間的聯系

中西醫的特點網上有非常多討論&#xff0c;概括起來就是西醫治病&#xff0c;中醫不治病 這個觀點有部分道理&#xff0c;但不全對 中醫落后的原因有非常多&#xff0c;但假設能用計算機的算法改進一下應該有非常大提升 比方翻譯&#xff0c;比方路線規劃&#xff0c;比方信號識…

程序的版式

版式雖然不會影響程序的功能&#xff0c;但會影響可讀性。程序的版式追求清晰、美觀&#xff0c;是程序風格的重要構成因素。可以把程序的版式比喻為“書法”。好的“書法”可讓人對程序一目了然&#xff0c;看得興致勃勃。差的程序“書法”如螃蟹爬行&#xff0c;讓人看得索然…

java算法---五家共井

古代數學巨著《九章算數》中有這么一道題叫“五家共井&#xff0c;甲二綆&#xff08;汲水用的井繩&#xff09;不足&#xff0c;如&#xff08;接上&#xff09;乙一綆&#xff1b;乙三綆不足&#xff0c;如丙一綆&#xff1b; 丙四綆不足&#xff0c;如丁一綆&#xff1b;丁五…

看雪逆向學習導航

---------------------------------------------------------------------------- 工具教程: OllyDbg IDA Windbg GDB 基本方法 參考資料 逆向原理 ----------------------------------------------------------------------------

viewController的生命周期

一、結構 按結構可以對iOS的所有ViewController分成兩類&#xff1a; 1、主要用于展示內容的ViewController&#xff0c;這種ViewController主要用于為用戶展示內容&#xff0c;并與用戶交互&#xff0c;如UITableViewController&#xff0c;UIViewController。 2、用于控制和顯…

android123 zhihuibeijing 新聞中心-新聞 頁簽 ViewPagerIndicator實現

## ViewPagerIndicator ## 使用導入ViewPagerIndicator庫的方式相當于可以改源碼&#xff0c;打包編譯Eclips可以自動完成。ViewPager指針項目&#xff0c;在使用ViewPager的時候能夠指示ViewPager所在的位置&#xff0c;就像Google Play中切換的效果一樣&#xff0c;還能使用…

java 獲取隨機數字的三種方法

1 //方法1 (數據類型)2 //(最小值Math.random()*(最大值-最小值1))3 // 例:4 (int)(1Math.random()*(10-11)) //從1到10的int型隨數5 6 方法2 獲得隨機數7 for (int i0;i<30;i)8 {9 System.out.println((int)(1Math.random()*10)); 10 } 11 (int)(1Math.random()*10) 1…

LVS原理及實踐(NAT模式)

LVS無論NAT及DR模式&#xff0c;均要求LVS server和real server在同一個網段內&#xff0c;NAT需要把lvs server當作各個realserver的默認網關&#xff0c;DR模式采用修改mac地址直接從數據鏈路層轉發、要求必須在同一個物理網段內 LVS-NAT的實驗網絡拓撲&#xff1a; 采用青…