当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。