關於const引起的內鏈和外鏈問題詳解

2021-09-24 13:47:37 字數 1198 閱讀 2401

在此之前,我們先來了解一點東西:

在c++語言編譯的過程中解析都是由內向外的, 即區域性作用域->檔案作用域->全域性作用域

const說明的全域性變數預設是內鏈的,可以加上extern來使其外鏈。

具有外鏈特性的物件應該在全域性作用域中使用extern加以說明,並對其進行初始化或定義。

全域性物件預設是外鏈的。

那麼,讓我們一起來檢視兩個例項:

例項一:

[root@vm_0_9_centos extern]# cat var_def.cpp 

extern const char const_var[100] = "全域性作用域";

[root@vm_0_9_centos extern]# cat main.cpp

#includevoid test1(){

extern const char const_var[100];

std::coutextern const char const_var[100];

std::cout《其次,慣例分析一下例項2吧,好傢伙:

[root@vm_0_9_centos extern]# g++ main.cpp var_def.cpp

/tmp/ccuzyhqq.o: in function `test1()':

main.cpp:(.text+0x5): undefined reference to `const_var'

collect2: error: ld returned 1 exit status

[root@vm_0_9_centos extern]#

這個傢伙連編譯鏈結都沒完成,,,悽悽慘慘戚戚,乍涼風起,雨夜寒.....

首先test1, 按照慣例,由內向外,區域性作用域沒有const_var的定義,然後main.cpp檔案作用域也遺憾錯過,然後分析下全域性吧,extern const char const_var[100];在這裡宣告了乙個const char[100]的常量const_var, 那我們去找找, 嘿,var_def.cpp裡面有,嗄,這傢伙好像變節了,沒有了extern, 那麼此時在var_def.cpp中識別符號const_var就是屬於檔案作用域的了,具有內鏈性,就是說extern const char const_var[100]; 不能成功配對了, 掩閒月,閉幽窗,天涯莫問羈旅,縱使相逢應不識!然後就找不到鏈結了。

最後來總結幾個注意點吧:

SEO 外鏈 內鏈 的定義

外鏈 外鏈就是指從別的 匯入到 自己 的 鏈結。匯入鏈結對於 優化來說是非常重要的乙個過程。匯入鏈結的質量 即匯入鏈結所在頁面的權重 直接決定了我們的 在 搜尋引擎中的 權重。外鏈是 網際網路的血液,是 鏈結的一種。沒有鏈結 資訊是孤立,結果就是我們什麼都看不到。在乙個 內部,許多網頁需要互相串聯在...

MYSQL 外鏈內鏈查詢總結

1 什麼是連線查詢 連線查詢是將兩個或兩個以上的表按某個條件連線起來,從中選取需要的資料。連線查詢是同時查詢兩個或兩個以上的表時使用的。當不同的表中存在相同意義的字段時,可以通過該欄位連線這幾個表 join或者cross join 或者inner join 通過on連線來顯示兩個表中符合連線條件的記...

外鏈與內鏈重要性pk

外鏈與內鏈哪個更重要呢?內鏈的培植是乙個死板的過程,而且是吃力的,然而它後期帶來的排名下場是較著 不變的。做一次當真的優化,必然要把上 的基本打好,即使你此刻排名欠好,被一些人取笑,但笑到最後的人往往笑得最甜。內鏈的建設有5個常見的體例 1 導航 良多時辰 的導航往往是 的二級關頭詞,每更新乙個頁面...