一。const和引用的疑惑
#include int輸出結果main()
2.什麼是符號表?
#符號表是編譯器在編譯過程中產生的關於源程式中語法符號的資料結構。
#如常量表、變數名錶、陣列名表、函式名錶。
#符號表是編譯器自用的內部資料結構
#符號表不會進入最終產生的可執行程式中。
3.上面程式疑惑解答
a。只有用字面量初始化const才會進入符號表。
#對const常量引用會導致編譯器為其分配空間
#雖然const常量被分配了空間,但是這個空間中的值不會被使用
#使用其他變數初始化的const常量仍然是唯讀變數(其他變數變了,它就得變,上例的z)。
b。被volatile修飾的const常量不會進入符號表
#退化為唯讀變數,每次訪問都從記憶體中取值(上例的y和*p)
c。const引用的型別與初始化變數的型別
如果相同:使初始化變數成為唯讀變數
如果不同:生成乙個新的唯讀變數,其初始值與初始化變數相同
二。引用與指標的疑惑
1.**
#include structsv;輸出結果structsr;
intmain()
; sr sr =;
printf(
"&sv = %p\n
", &sv);
printf(
"&sv.x = %p\n
", &sv.x);
printf(
"&sv.y = %p\n
", &sv.y);
printf(
"&sv.z = %p\n
", &sv.z);
printf(
"&sr = %p\n
", &sr);
printf(
"&sr.x = %p\n
", &sr.x);
printf(
"&sr.y = %p\n
", &sr.y);
printf(
"&sr.z = %p\n
", &sr.z);
sv& rsv =sv;
rsv.x = 4
; rsv.y = 5
; rsv.z = 6
;
printf(
"sv.x = %d\n
", sv.x);
printf(
"sv.y = %d\n
", sv.y);
printf(
"sv.z = %d\n
", sv.z);
return0;
}
2。疑惑答疑
a。指標是乙個變數,其值為乙個記憶體位址,通過指標可以訪問對應記憶體位址中的值
. b。引用就是變數的乙個新名字,所有對引用的操作(賦值,取位址)都會傳遞到引用的變數上面。
c。指標可以被const修飾成為常量或者唯讀變數。
d。const引用使其引用的變數具有唯讀屬性。
e。指標就是變數,不需要初始化,也可以指向不同的位址。
d。引用天生就是在定義的時候初始化,之後便無法在引用其他變數。
3.如何理解「引用的本質就是指標常量」
a。從使用c++語言的角度來看
#引用和指標常量沒什麼關係。
#引用是變數的新名字,操作引用就是操作對應的變數
b。從c++編譯器的角度來看
#為了支援新概念「引用」必須要乙個有效的解決方案
#在編譯器內部,使用指標變數來實現「引用」
#因此「引用」在定義時必須初始化
三。過載的疑惑
1.**
#include void func(int a, int2.深入理解過載規則b)void func(int a, char
b)void func(char a, int
b)void func(char a, char
b)int
main()
# 精確匹配實參
# 通過預設型別轉換匹配實參
#通過預設引數匹配實參
三條規則會同時對已存在的過載函式進行挑選
# 當實參為變數並能夠精確匹配形參時,不再進行預設型別轉換的嘗試
#當實參為字面量時,編譯器會同時進行精確匹配和預設型別轉換的嘗試
四.c方式編譯的疑惑
#include extern"c2.深入理解extern「c」"}void func(const
char*s)
int func(int a, int
b)int
main()
#extern「c」告訴c++編譯器將其中的**進行c方式的編譯
a。c方式的編譯主要按照c語言的剛剛規則對函式名進行編譯。
#函式名經過編譯後可能與原始碼中的名字有所不同
#c++編譯器為了支援過載,函式名經過編譯後會加上引數資訊,因此編譯後的函式名與原始碼中完全不同。
#c編譯器不會在編譯後的函式名中加上引數資訊。
b。extern「c」中的過載函式經過c方式編譯後將得到相同的函式名,因此extern「c」中不允許函式過載,但extern「c」中的函式可以與extern「c」之外的函式進行過載。
專題一經典問題解析
什麼是符號表?引用與指標的疑惑 過載的疑惑 c方式編譯的疑惑?include int main volatie會使編譯器不做任何優化,每次都從記憶體中取值 include int main int main include using namespace std int main 什麼是符號表?符號...
5 專題一經典問題解析
1 const和引用的疑惑 include int main 2 符號表是編譯器在編譯過程中產生的關於源程式中語法符號的資料結構 如常量表 變數名錶 陣列名表 函式名錶等等 符號表是編譯器自用的內部資料結構 符號表不會進入最終產生的可執行程式中 3 只有用字面量初始化的const常量才會進入符號表 ...
專題一之經典問題解析
一.例項1 const與引用的問題 什麼是符號表?如何才能進入到符號表,成為真正的常量 1 符號表是編譯器編譯過程中產生的資料結構 2 volatile修飾的const常量不會進入到符號表中 如 volatile const int y 2 不會進入符號表中 const引用的型別與初始化變數的型別 ...