作者littleshan (我要加入劍道社!)
看板C_and_CPP
標題Re: [問題] namespace和static問題
時間Tue Apr 7 23:26:30 2009
※ 引述《tstanly ()》之銘言:
: 在書上看到兩個問題想請教一下
: 1.
: 關於namespace
: "現在的c++所有程式庫都定義在std的namespace中"
: 我們不是把所需要的東西都利用include進來嗎
: 那namespace和include之間的關係是?
我實在很想回「它們之間沒有關係」
不過這一定不是你要的答案
namespace 用來區隔名稱,以避免相同的 symbol 互相衝突。
比如說你今天想自已實作一個類似 vector 的東西
你可以在 header 檔中這樣寫:
#ifndef MY_VECTOR_H
#define MY_VECTOR_H
namespace my_namespace {
class vector {
...
};
}
#endif // MY_VECTOR_H
這麼一來,你的程式可以同時使用你寫的 vector 以及 std
底下的 vector:
#include <vector>
#include "my_vector.h"
int main()
{
my_namespace::vector a; // 你自己寫的 vector
std::vector<int> b; // STL vector
...
}
#include 的作用只是在 compile 時把該檔案的內容讀進來而己,
它和 namespace 沒什麼關係,你也可以寫個 header file 但完全
不用 namespace,還是一樣可以 include。(不過這種事好孩子不要學)
: 2.
: "c++之所以支援static成員變數原因在於避免使用global var
: 若在OO中使用使用global var豈不是破壞了封裝性質"
: 使用global var為什麼會破壞封裝封裝?
因為你所使用的每個函式都可以去存取到它,大大增加被錯誤使用
的可能性。變數的 scope 愈大,你要檢查的程式碼就愈多。
: 對我來說現在寫static var其實和global var沒有什麼兩樣...
: 其實是我功力太淺...有人可以指點一下嗎
: 謝謝
static variable 的 scope 僅限該檔案,global variable 則是
任何一個有被連結的 source 都可以存取該變數。
但這年頭 C++ 不鼓勵你用 static variable 了,你可以用 anonymous
namespace 來達到同樣的封裝效果。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.217.30.28
推 QQ29:不好意思 想請教一下 什麼是 anonymous namespace呢? 04/08 00:12
→ QQ29:我有看過namespace {}沒給名稱的 但這樣要怎麼用內部的東西阿 04/08 00:12
推 tstanly:他指的就是沒有名稱的沒有名稱的namespacee吧 04/08 00:42
→ tstanly:他是特別在只能在此file中使用其他成員 04/08 00:42