C++:const類型數據的修改問題

在C語言中const類型的數據嚴格意義上可以修改:

const int a=1;
int*b=&a;
*b=2;

不同于C語言,C++中指針類型是要嚴格對應的,對const類型的數據必須使用const類型的指針進行接收,從而避免修改;
但問題是c++中同樣支持指針的強制類型轉換那么問題就出現了,對于下面這段代碼輸出就會顯得不正常:

const int a=1;
int*b=(int*)&a;
*b=2;
cout<<a<<" "<<b<<endl;
cout<<&a<<" "<<b;

我們會發現對a和b,它們的值不同但是對應的地址不同,就好像出現了一個地址內包含兩個值的情況。
回顧內存劃分可以發現,const類型的數據一般存儲在data區,而指針類型數據則通常存儲在棧區,實際上不同的分區存儲數據的規則不同,但一般不會出現相同的地址,除非以下兩種情況:

  1. 內存映射:操作系統在虛擬內存中進行地址映射時,可能將不通過的存儲區域映射到相同的虛擬地址。
  2. 編譯器優化:編譯器可能會對代碼進行優化,將某些數據放在相鄰的內存地址,包括不同存儲區域的數據。這種優化可能導致棧上的變量和數據區的變量具有相同的地址。

如果說虛擬地址不是全局唯一的話就可以推測是對const強制類型轉換后改變值的行為是未定義的,編譯器進行了優化,在棧區重新開辟了一段地址用于進行修改,所以就出現了兩個不同的變量擁有相同地址的情況。

有不同想法歡迎探討

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

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

相關文章

年度工作總結怎么寫?掌握這些年終總結萬能公式,讓你的報告出彩無比!

光陰似箭&#xff0c;日月如梭&#xff0c;時間總是不疾不徐地向前奔去&#xff0c;轉眼就來到了2023年的最后一個月&#xff0c;12月一到&#xff0c;上班族和打工人又要開始忙活工作總結的事情~ 工作總結&#xff0c;不僅是一年工作的回顧&#xff0c;更是未來規劃的起點。你…

Springboot中的RestTemplate

Springboot中的RestTemplate 在Spring Boot應用程序中&#xff0c;RestTemplate是一個用于進行HTTP請求的強大工具。通常用于與RESTful API進行交互、調用其他服務或執行HTTP請求。它提供了各種方法來發送HTTP請求&#xff08;如GET、POST、PUT、DELETE等&#xff09;&#xf…

cuda lib 線程安全的要義

1, 概述 cuda lib 線程安全的幾個多線程的情景&#xff1a; 單卡多線程&#xff1b; 多卡多線程-每卡單線程&#xff1b; 多卡多線程-每卡多線程&#xff1b; 需要考慮的問題&#xff1a; 每個 cublasHandle_t 只能有一個stream么&#xff1f; 每個cusolverHandle_t 只能有一…

python3.5安裝教程及環境配置,python3.7.2安裝與配置

大家好&#xff0c;小編來為大家解答以下問題&#xff0c;python3.5安裝教程及環境配置&#xff0c;python3.7.2安裝與配置&#xff0c;現在讓我們一起來看看吧&#xff01; python 從爬蟲開始&#xff08;一&#xff09; Python 簡介 首先簡介一下Python和爬蟲的關系與概念&am…

Android Studio的代碼筆記--IntentService學習

IntentService學習 IntentService常規用法清單注冊服務服務內容開啟服務 IntentService 一個 HandlerThread工作線程&#xff0c;通過Handler實現把消息加入消息隊列中等待執行&#xff0c;通過傳遞的intent在onHandleIntent中處理任務。&#xff08;多次調用會按順序執行事件…

Spring Cloud Alibaba實踐 --Sentinel

sentinel簡介 Sentinel的官方標題是&#xff1a;分布式系統的流量防衛兵。從名字上來看&#xff0c;很容易就能猜到它是用來作服務穩定性保障的。對于服務穩定性保障組件&#xff0c;如果熟悉Spring Cloud的用戶&#xff0c;第一反應應該就是Hystrix。但是比較可惜的是Netflix…

三防平板|手持終端PDA|8寸/10寸工業三防平板電腦主板方案定制

近年來&#xff0c;隨著科技的快速發展&#xff0c;三防平板成為了各行各業中不可或缺的工具。三防平板采用IP67級別的防護設計&#xff0c;通過了多項測試標準&#xff0c;如國標和美標&#xff0c;具備防水、防摔、防塵、防撞、防震、防跌落以及防鹽霧等多重防護功能。因此&a…

JavaScript 簡單理解原型和創建實例時 new 操作符的執行操作

function Person(){// 構造函數// 當函數創建&#xff0c;prototype 屬性指向一個原型對象時&#xff0c;在默認情況下&#xff0c;// 這個原型對象將會獲得一個 constructor 屬性&#xff0c;這個屬性是一個指針&#xff0c;指向 prototype 所在的函數對象。 } // 為原型對象添…

HarmonyOS應用開發工具DevEco Studio安裝與使用

語雀知識庫地址&#xff1a;語雀HarmonyOS知識庫 飛書知識庫地址&#xff1a;飛書HarmonyOS知識庫 知識庫內容逐步完善中… 工欲善其事必先利其器&#xff0c;要編寫HarmonyOS應用就需要用到官方提供的IDE工具來編寫相應的代碼。 在鴻蒙開發者官網&#xff0c;其提供了官方的開…

基于Java醫院掛號管理系統

基于Java醫院掛號管理系統 功能需求 1、患者信息管理&#xff1a;系統需要提供患者的基本信息錄入功能&#xff0c;包括姓名、性別、年齡、聯系方式等。此外&#xff0c;系統還應支持對患者信息進行修改、查詢和刪除的操作。 2、掛號管理&#xff1a;系統需要提供掛號功能&a…

高效的多維空間點索引算法——GeoHash

一、Geohash 算法簡介 GeoHash是空間索引的一種方式&#xff0c;其基本原理是將地球理解為一個二維平面&#xff0c;通過把二維的空間經緯度數據編碼為一個字符串&#xff0c;可以把平面遞歸分解成更小的子塊&#xff0c;每個子塊在一定經緯度范圍內擁有相同的編碼。以GeoHash方…

springboot 極簡案例

安裝idea File -> New Project 選擇依賴 創建controller文件 輸入controller類名 輸入代碼 運行項目 訪問 localhost:8080/hello/boot package com.example.demo;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.…

數據庫對象介紹與實踐:視圖、函數、存儲過程、觸發器和物化視圖

文章目錄 一、視圖&#xff08;View&#xff09;1、概念2、基本操作1&#xff09;創建視圖2&#xff09;修改視圖3&#xff09;刪除視圖4&#xff09;使用視圖 3、使用場景4、實踐 二、函數&#xff08;Function&#xff09;1、概念2、基本操作1&#xff09;創建函數2&#xff…

粵能環保亮相迪拜COP28,智能技術鑄就運河城市可持續未來

在全球應對氣候變化的重要會議——迪拜COP28大會上&#xff0c;運河城市面臨的獨特環境挑戰引起了廣泛關注。隨著城市化進程的加快&#xff0c;運河城市在處理固體廢物、減少溫室氣體排放以及維持水資源安全方面面臨著嚴峻考驗。智能垃圾分類作為應對這些挑戰的有效途徑&#x…

一些系統日常運維命令和語句

一、前言 記錄一些日常系統運維的命令和語句 二、linux命令與語句 1、linux查看各目錄使用磁盤情況 du -h /home home為目錄 du -h /home 2.查看內存使用情況 free -h 3、查看進程和CPU使用情況 top top 三、數據庫語句 1、統計mysql數據庫表數量 SELECT COUNT(*) A…

被動副業機賺錢項目教程,Docker一鍵安裝教程

被動副業機賺錢項目教程&#xff0c;Docker一鍵安裝教程 Docker一鍵運行 軟件下載 視頻教程 /opt/wxedge_storage 路徑換成你設備里面的路徑即可&#xff0c;其余參數不用變&#xff0c; 鏡像名為onething1/wxedge 更多安裝說明&#xff0c;可參考官方文檔&#xff1a;容器魔…

【算法每日一練]-結構優化(保姆級教程 篇4 樹狀數組,線段樹,分塊模板篇)

目錄 分塊 分塊算法步驟&#xff1a; 樹狀數組 樹狀數組步驟&#xff1a; 線段樹點更新 點更新步驟&#xff1a; 線段樹區間更新 區間更新步驟&#xff1a; 不同于倍增和前綴和與差分序列。 前綴和處理不更新的區間和 差分處理離線的區間更新問題 倍增處理離線的區間…

C++的繼承語法

在面向對象編程中&#xff0c;繼承是一種強大的機制&#xff0c;允許一個類&#xff08;子類&#xff09;從另一個類&#xff08;父類&#xff09;繼承屬性和方法。C是一種支持面向對象編程的編程語言&#xff0c;通過其靈活而強大的繼承語法&#xff0c;開發者可以構建更加模塊…

維普論文查重率高【詳細說明】

大家好&#xff0c;今天來聊聊維普論文查重率高&#xff0c;希望能給大家提供一點參考。 以下是針對論文重復率高的情況&#xff0c;提供一些修改建議和技巧&#xff1a; 維普論文查重率高&#xff1a;原因分析與降重技巧 背景介紹 在學術領域&#xff0c;論文的重復率是衡量其…

老電腦重置后能連上WIFI但是打開360網頁老是提示該網址不是私密連接

看了一下可以忽略這次提示&#xff0c;能夠上網&#xff0c;但是每次打開新網頁都會有“該網址不是私密連接”提示&#xff0c;這個提示非常大&#xff0c;嚴重影響上網。 強行下載了谷歌瀏覽器并打開后&#xff0c;提示“您的時鐘慢了”&#xff0c;然后看了一下電腦右下角日期…