當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C++ Using Keyword用法及代碼示例


C++ 中的 using 關鍵字是一個允許開發人員指定特定命名空間的使用的工具。當使用可能使用許多不同名稱空間的大型代碼庫或庫時,這特別有用。 using 關鍵字可用於指定單個命名空間的使用,也可以使用 using 關鍵字列出多個命名空間。

使用 using 關鍵字時,請務必記住,指定的命名空間將優先於範圍內的任何其他命名空間。如果代碼不是well-organized,這可能會導致意外結果。因此,通常認為謹慎使用 using 關鍵字並且僅在絕對必要時才使用是一種良好的做法。

除了 using 關鍵字之外,C++ 還提供 using 命名空間指令。該指令可用於指定特定庫或代碼庫中所有命名空間的使用。應謹慎使用 using 命名空間指令,因為它會使代碼難以閱讀和維護。當使用大型代碼庫或當您想要確保代碼將在特定環境中運行時,這尤其有用。

在 C++ STL 中使用 “using” 關鍵字

using 關鍵字可以通過以下方式使用:

  1. 用於命名空間
  2. 用於繼承
  3. 用於別名
  4. 用於指令

1.“using”用於命名空間

使用允許您指定要使用特定的命名空間。如果您想避免每次要使用該命名空間中的某些內容時都鍵入完整的命名空間名稱,這非常有用。

例子:

C++


#include <iostream>
using namespace std;
int main() {
   cout << "Hello, world!";
   return 0;
}
輸出
Hello, world!

2.“using”用於繼承

使用允許您指定一個類從另一個類繼承。如果您想避免每次使用基類時都必須鍵入基類的全名,那麽這非常有用。

例子:

C++


#include <iostream>
using namespace std;
class Base {
public:
    int x;
    // parameterized constructor
    Base(int a) : x(a){};
};
class Derived : public Base {
public:
    int y;
    using Base::Base;
};
int main()
{
    Derived d(42);
    d.y = 12;
    cout << d.x << " " << d.y << '\n';
    return 0;
}
輸出
42 12

Note: The C++ compiler does not create any default and copy constructor once we explicitly define any constructor. So we need to declare them explicitly to avoid bugs.

3.“using”用於別名:

使用允許您為類型指定備用名稱。如果您想避免每次使用某個類型時都必須鍵入該類型的全名,那麽這會很有用。

例子:

C++


#include <iostream>
using namespace std;
using ll =  long long; // Here we alias "ll" to stand for long long and save typing it out
int main() {
   
   ll a = 5;
   cout << a;
   return 0;
}
輸出
5

4.“用於指令:

using 可以用作編譯器的指令,告訴它包含特定的頭文件。如果您想確保在編譯代碼時始終包含特定的頭文件,這非常有用。

C++


#include <iostream>
using std::cout;
using std::endl;
int main() {
   cout << "Hello, world!" << endl;
   return 0;
}
輸出
Hello, world!

“using” 關鍵字的形式

“using” 關鍵字有兩種不同的形式:

  1. 使用命名空間 std; - 這種形式會將 std 命名空間中的所有內容帶入您的代碼中。
  2. 使用 std::cout;或使用 std::cin;- 這種形式隻會將 cout 對象帶入您的代碼中。
  3. 使用 std::endl;- 此形式用於僅使命名空間中的特定名稱在當前命名空間中可用。
  4. 您還可以將 “using” 關鍵字與您自己的命名空間一起使用。

Note: if you have a namespace called “mynamespace”, you could use it like this: 

using namespace mynamespace;

Or, if you only wanted to bring in the “myclass” object from that namespace, you could use this form: 

using mynamespace::myclass;

“using”關鍵字的限製:

“using” 關鍵字非常有用,但如果您不小心,它也可能會導致問題。

  • 在大型代碼庫中使用它時需要小心。原因是有時會導致名稱衝突。
  • 每個文件中隻能有一個命名空間。
  • 如果一個文件中有多個命名空間,則必須完全限定命名空間中除當前所在命名空間之外的任何類型的名稱。
  • 您不能使用 using 關鍵字使全局命名空間中的類型可見。
  • 您不能使用 using 關鍵字使 System 命名空間中的類型可見。
  • 您不能使用 using 關鍵字使父命名空間中的類型可見。
  • 您不能使用 using 關鍵字使靜態類可見。

注意:

Imagine you have a codebase that includes both the “std” and “mynamespace” namespaces. If you use the “using” keyword to bring everything in both namespaces into your code, you might end up with two objects with the same name. This can cause compile-time errors or, worse, unexpected behavior at runtime.

To avoid these problems, it’s best to be explicit about which namespaces you’re using. 

例子:如果您隻想使用“std”命名空間,您應該像這樣編寫代碼:using namespace std;

如果您隻想使用 “mynamespace” 命名空間,則應該像這樣編寫代碼: using namespace mynamespace;這可能看起來需要大量額外工作,但為了避免日後出現問題,這是值得的。 “using” 關鍵字是一個強大的工具,允許您指定程序中特定實體的使用。特別是,它經常用於指定命名空間、類或函數的使用。

示例 1:

C++


// C++ Program to implement
// "using" keyword
#include <iostream>
using namespace std;
int main()
{
    cout << "Hello, world!" << endl;
    return 0;
}
輸出
Hello, world!

在此代碼中,“using” 關鍵字用於指定使用 “std” 命名空間中的 “cout” 對象。如果沒有“using”關鍵字,代碼將無法編譯。

“using” 關鍵字也可用於指定特定函數或類的使用。

示例 2:

C++


// C++ Program to implement
// "using" keyword
#include <iostream>
#include <string>
using std::cout;
using std::endl;
using std::string;
int main()
{
    string s = "Hello, world!";
    cout << s << endl;
    return 0;
}
輸出
Hello, world!

在此代碼中,“using” 關鍵字用於指定使用 “std” 命名空間中的 “string” 和 “cout” 對象。如果沒有“using”關鍵字,代碼將無法編譯。



相關用法


注:本文由純淨天空篩選整理自ojasvigupta大神的英文原創作品 Using Keyword in C++ STL。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。