2010-04-24 36 views
1

運行時庫是否會污染全局命名空間?運行時庫和全局命名空間

+0

我指的是在此指定的運行時庫: http://en.wikipedia.org/wiki/Runtime_library 運行時庫不是標準庫,它用於實現異常處理,與其他的東西在C++中。 – aCuria 2010-04-24 18:17:57

回答

1

運行時庫需要使用保留標識符。如果沒有名稱空間限定,則必須以兩個下劃線開頭:__start等。

您不能使用保留名稱。圖書館不允許使用你的名字。如果任何一方交叉到另一方,那就是非法的「污染」。

本質上,C和C++的情況是相同的,除了其他答案指出,在C++中大多數標準庫名稱具有名稱空間限定。

3

我不認爲你真的理解你正在使用的術語,但C++標準庫中的名字存在於std命名空間中,所以答案是否定的。在發起C標準庫中的頭文件中的姓名放置在全局命名空間,如果你通過.H文件名#包括它們,如:

#include <stdio.h> 

如果你#包括他們是這樣的:

#include <cstdio> 

然後名稱同時存在於全局名稱空間和標準名稱空間中。

將對象放置在標準名稱空間中的原因並不是爲了避免「名稱空間污染」,它幾乎不是一個價值中立的術語,而是爲了避免名稱衝突。

+0

運行時庫似乎不在標準庫內。 http://en.wikipedia.org/wiki/Runtime_library – aCuria 2010-04-24 18:10:00

+1

@Curia然後請澄清你問的是什麼名字。 C++標準沒有指定運行時庫。在C++中,命名空間是編譯時對象,不能被運行時的任何東西「拋棄」。 – 2010-04-24 18:12:43

+0

採取了一點,我添加了一條評論 – aCuria 2010-04-24 19:08:16

1

大多數圖書館的那張乾淨的命名空間std: - 然而,爲了向下兼容與C,您可以選擇通過包括舊頭部像<math.h>(這使許多名在全局命名空間)「污染」的全局命名空間而不是像<cmath>(它正確地使用std:名稱空間)這樣的新適配。

+1

通常,大多數實現將名稱放在兩個名稱空間中,如果你#include cmath等人。 – 2010-04-24 18:11:05