C++学习笔记第二天:几个知识点
第一天,囫圇吞棗的把C++的基本概念擼了一遍
有幾個地方不太理解,今天有針對性的學習一下
?
1、namespace
自定義命名空間,主要為了解決類、函數和全局變量的命名沖突問題。
調用某個命名空間里的符號時,需要使用格式:命名空間::符號名稱
#include <iostream> using namespace std; namespace first {int var = 5; }namespace second {double var = 3.1416; }int main () {cout << first::var << endl;cout << second::var << endl;return 0; }結果是
5
3.1416
兩個全局變量都是名字都是var,但是他們不在同一個namespace中所以沒有沖突。
關鍵字using可以幫助從namespace中引入名字到當前的聲明區域
#include <iostream> using namespace std;namespace first {int x = 5;int y = 10; }namespace second {double x = 3.1416;double y = 2.7183; }int main () {using first::x;using second::y;cout << x << endl;cout << y << endl;cout << first::y << endl;cout << second::x << endl;return 0; }輸出是
5
2.7183
10
3.1416
就如我們所指定的第一個x是first::x,y是second.y
?
namespace也支持嵌套
需要注意的時,盡量不要在頭文件中使用using namespace,因為頭文件的引用具有不確定性,因此一旦在頭文件中整體using了某個namespace,那么有可能會造成名稱污染。
總而言之,using namespace 應盡可能的限制在小范圍的作用域內。
?
2、頭文件與源文件
頭文件的后綴:.h,不需要編譯,主要用于變量和函數的聲明,而不必完成具體的實現,起到一個接口的作用。
源文件的后綴:.cpp,需要進行編譯,主要存放函數的具體實現。
我的理解是:
在C++中,任何的符號(函數或者變量)都需要事先聲明之后才可以調用。
假設有兩個cpp源文件A和B,在A中定義了函數AFun,那如果B中需要調用這個AFun的話,也需要用同樣的格式進行聲明,然后才可以調用到AFun。
如果這個AFun是一個使用率很高的函數,或者A中還有很多類似的函數,那么所有需要這些函數的源文件都要被迫進行一系列的聲明
頭文件就是解決這個問題的,將A中所有使用率比較高的函數聲明編寫成一個獨立的頭文件,那其他源文件只需include這個頭文件即可,無需將里面的函數再聲明一遍。
值得注意的是,如果在頭文件中聲明變量,應該加上 extern 前綴,否則如果有兩個以上的源文件引用這個頭文件時,會提示編譯錯誤。
有一篇文章說的非常好,鏈接在此:http://blog.csdn.net/chillon_liao/article/details/44261921
?
3、extern
extern 存儲類用于提供一個全局變量的引用,全局變量對所有的程序文件都是可見的。當您使用 'extern' 時,對于無法初始化的變量,會把變量名指向一個之前定義過的存儲位置。
當您有多個文件且定義了一個可以在其他文件中使用的全局變量或函數時,可以在其他文件中使用 extern 來得到已定義的變量或函數的引用。可以這么理解,extern 是用來在另一個文件中聲明一個全局變量或函數。
extern 修飾符通常用于當有兩個或多個文件共享相同的全局變量或函數的時候
第一個文件:main.cpp
#include <iostream>int count ; extern void write_extern();int main() {count = 5;write_extern(); }第二個文件:support.cpp
#include <iostream>extern int count;void write_extern(void) {std::cout << "Count is " << count << std::endl; }最后輸出:
Count is 5
?
寵辱不驚,看庭前花開花落;去留無意,望天上云卷云舒
總結
以上是生活随笔為你收集整理的C++学习笔记第二天:几个知识点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [PHP] PHP与Apache的模块配
- 下一篇: 人工智能离我们有多远/近?