日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

《C++ Primer Plus(第六版)》(13)(第九章 内存模型和命名空间 笔记)

發(fā)布時間:2024/1/17 c/c++ 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《C++ Primer Plus(第六版)》(13)(第九章 内存模型和命名空间 笔记) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.為了保持通用性,C++使用術(shù)語翻譯單元,而不是文件,文件不是計算機組織信息時的唯一方式。


2.C++允許編譯器使用自己的名稱修飾,因此不同的編譯器編譯出來的二進制模塊(對象代碼文件),通常是無法鏈接的。


3.

自動存儲持續(xù)性:代碼塊內(nèi)局部的變量,走過了就自動消失了。

靜態(tài)存儲持續(xù)性:程序員了,就一直存在,直到程序結(jié)束。起作用域看聲明的位置。

線程存儲持續(xù)性:并行編程用到,使用tread_local聲明,則與線程同壽了。

動態(tài)存儲持續(xù)性:用new來分配的內(nèi)存,直到delete才回收。


4.在C++舊版本和C中,auto是用于顯示聲明自動存儲的。但是因為自動存儲在局部變量中是默認的,所以幾乎沒人使用。

在C++11之后auto這樣的用法被刪掉了,改成自動類型推斷。


5.自動存儲被放在棧中。

棧是用來對自動變量進行管理,之所以成為棧,就是新數(shù)據(jù)被象征性放在原有數(shù)據(jù)的上面。

棧是后進先出的。

棧使用兩個指針,一個在底部,一個在頂部,上面的數(shù)據(jù)沒用之后,頂部指針向下移動,之前的位置上的內(nèi)容就不再被標記,但是沒有刪除的。

當下一個數(shù)據(jù)放入棧中的時候,就會覆蓋剛剛的內(nèi)容。


6.靜態(tài)存儲的變量,因為一直存在,所以編譯器分配了固定的位置給它們。變量的每個元素或成員的默認值都是0。


7.內(nèi)部鏈接和外部鏈接的問題。

先看看代碼:

main.cpp

#include "Test.h" #include <iostream>using namespace std;extern int test; extern int test2; void tttttt() {cout << test << endl;cout << test2 << endl; } Test.h

#ifndef _Test_H_ #define _Test_H_void tttttt(); #endifTest.cpp

#include "Test.h" #include <iostream>using namespace std;extern int test; extern int test2; void tttttt() {cout << test << endl;cout << test2 << endl; }
在main.cpp里面聲明了靜態(tài)變量test,和test2.只有test2用了static。

在Test.cpp中是無法直接使用的。

所以使用了外部聲明。但是因為test是外部鏈接的,所以能鏈接上。

而test2是內(nèi)部鏈接的。鏈接不上,實際上,編譯的時候會報錯:

1>------ 已啟動生成: 項目: CppPrimer, 配置: Debug Win32 ------ 1> main.cpp 1> Test.cpp 1> 正在生成代碼... 1>Test.obj : error LNK2001: 無法解析的外部符號 "int test2" (?test2@@3HA) 1>E:\mywokespace\CppGame\Debug\CppPrimer.exe : fatal error LNK1120: 1 個無法解析的外部命令 ========== 生成: 成功 0 個,失敗 1 個,最新 0 個,跳過 0 個 ==========


8.使用了extern來聲明的變量,沒有分配內(nèi)存,而且必須有一個文件內(nèi)是真正定義的。


9.存儲說明符

auto(C++11中已經(jīng)不是說明符了)

register(C++11以前是指示寄存器存儲,C++11之后就是顯式支出自動變量)

static:靜態(tài)存儲

extern:外部變量

thread_local:線程變量,C++11新增的,可以與static或extern一起使用

mutable:聲明這樣的成員,表示即使變量為const,其屬性也可以改變


cv-限定符:

const:常量

volatile:中文意思是可變的,多變的,聲明了這個關(guān)鍵字的變量,可能即使不對其進行修改,其本身也會產(chǎn)生變化。

聲明了volatile的變量,將不再放在寄存器中進行訪問優(yōu)化。


10.使用外部C語言庫的時候,引用他們的函數(shù)可以用extern

extern "C" void spiff(int);

即使是同一個編譯器,編譯出的C和C++的鏈接語言也可能不同。因為C中沒有重載,C++有重載,所以函數(shù)名肯定要復(fù)雜多。


11.通常編譯器使用三塊獨立的內(nèi)存:靜態(tài)變量,自動變量(棧),動態(tài)變量(堆)。


12.using可以指定使用命名空間,可以指定使用命名空間中的某個屬性。

#include <iostream> #include <array> #include <string> #include <set> //#include "test.h" using namespace std;//使用命名空間 namespace FableGame {int test = 1; } int test = 2; int main() {using FableGame::test;//使用某個屬性cout << test << endl;//1cout << ::test << endl;//2std::cin.get();std::cin.get();return 0; }
13.可以給名稱空間創(chuàng)建別名,例如:

namespace a {}; namespace b = a;












轉(zhuǎn)載于:https://www.cnblogs.com/fablegame/p/6430251.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的《C++ Primer Plus(第六版)》(13)(第九章 内存模型和命名空间 笔记)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。