在C++中,namespace 是一個非常重要的概念,用于組織代碼,避免名稱沖突。namespace(命名空間)是一個邏輯上的代碼組織單元,用于將代碼(類、函數、變量等)分組,從而避免命名沖突。例如,如果兩個不同的模塊都有一個名為 Controller 的類,通過將它們放在不同的命名空間中,可以避免沖突。
在以往最簡單的使用就是std命名空間了。
using namespace std;cout << "hello" << endl;
// 否則就是 std::cout << "hello" << std::endl;
定義命名空間
可以在代碼中使用 namespace 關鍵字來定義一個命名空間。
// value 和 printValue 都屬于 example 命名空間
namespace example
{int value = 10;void printValue() {std::cout << "Value: " << value << std::endl;}
}
要使用命名空間中的成員,可以使用作用域運算符 ::
example::printValue(); // 輸出: Value: 10
為了簡化代碼,可以使用 using 指令將命名空間中的成員引入到當前作用域中。
using namespace example;
printValue(); // 直接使用,而不需要 `example::`
使用命名空間
namespace 是非常靈活的,可以出現在代碼的任何地方(全局作用域、函數內部、類內部等)。
void myFunction()
{namespace local {int value = 20;void printValue() {std::cout << "Local Value: " << value << std::endl;}}local::printValue(); // 輸出: Local Value: 20
}
兩個同名的命名空間使用
// module1的Controller類
namespace module1
{class Controller {public:void control() {std::cout << "Module1 Controller" << std::endl;}};
}// module2的Controller類
namespace module2
{class Controller {public:void control() {std::cout << "Module2 Controller" << std::endl;}};
}// 使用時不會沖突
module1::Controller c1;
c1.control(); // 輸出: Module1 Controllermodule2::Controller c2;
c2.control(); // 輸出: Module2 Controller