搜索
熱搜: 活動 交友 discuz
查看: 4502|回復: 0
打印 上一主題 下一主題

[教學] C++ 的 namespace 機制

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-9-4 09:04:03 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
C++ 的 namespace

寫程式時,很可能因為發展的程式碼,逐漸冗長,不小心就會用到同樣的名稱,C++ 對於
此問題,發展了 namespace 的機制。變數、資料、函式如果放在不同的 namespace 就不
會衝突,如:

當 include A.h 和 B.h 時,用 A::xxx 表示 A.h 裡面的 xxx,
                而用 B::xxx 表示 B.h 裡面的 xxx。
而兩者就必須以 A::xxx 和 B::xxx,作存取。

A.h:
──
  namespace XXX {
  void A()
  ...
  }

B.h
──
  namespace XXX {
  void B()
  ...
  }

它們就分別是 XXX::A() 和 XXX::B()

其實可以直接把 namespace 想成在 name 前面加上另一個 name,來避免衝突。

如果覺得每次要用某個 namespace 裡面的東西就要打 XXX::yyy 很麻煩,可以用

using namespace XXX;

宣告,則以上行敘述宣告之程式檔,就可直接引用 namespace 下的變數、資料、函式。

另外,還有一種 namespace,稱為 anonymous namespace,可取代以前的 global static
functions/variables,如:

A.cpp:
───
  namespace { // 不加上名字
  int xxx;
  }

那這個 xxx 就只能在 A.cpp 裡面使用。

較特別的,Standard C++ Library 裡面所有的東西都是放在 std 這個 namespace 裡,
所以用 cout 時就用 std::cout。但,我們平常在用 cout 時都沒有打 std::cout,也沒
有用「using namespace std;」,這樣為什麼不會有問題呢?

因為舊的 C++ library 並沒有把 cout 放在 namespace std 裡面,故可直接使用。

新的 Standard C++ Library 就會放在 std 裡 (請見 1998 年通過的 C++ Standard),
但為和舊的程式相容,所以新的 C++ library 的 header file 檔名不同,如:

在舊的 C++ library 裡面,cout 宣告在 iostream.h 裡面
但在新的 library 則是宣告在 iostream 裡面

也就是說:

#include <iostream.h>

會 include 舊的 header 檔,而

#include <iostream>

會 include 新的 header 檔
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

本論壇為非營利之網路平台,所有文章內容均為網友自行發表,不代表論壇立場!若涉及侵權、違法等情事,請告知版主處理。


Page Rank Check

廣告刊登  |   交換連結  |   贊助我們  |   服務條款  |   免責聲明  |   客服中心  |   中央分站

手機版|中央論壇

GMT+8, 2024-5-2 21:17 , Processed in 0.015824 second(s), 16 queries .

Powered by Discuz!

© 2005-2015 Copyrights. Set by YIDAS

快速回復 返回頂部 返回列表