“使用命名空间std的功能是什么;“在C++中?[重复]

8hhllhi2  于 2023-01-28  发布在  其他
关注(0)|答案(3)|浏览(135)
    • 此问题在此处已有答案**:

What does "using namespace" do exactly?(3个答案)
2年前关闭。

using namespace std;

这句话的作用是什么?
这是否具有"包含"的相同功能?

kq0g1dla

kq0g1dla1#

c++中的一个概念是命名空间,它以某种方式组织代码。
using namespace std;现在要做什么?让我们通过示例来探索这个问题。

#include <iostream>
int main() {
    std::cout << "Hello World" << std::endl; // important line
    return 0;
}

你可以在注解行看到std关键字,这叫做命名空间,所以你告诉编译器,你想使用命名空间std中的cout
使用using namespace std;

#include <iostream>
using namespace std;
int main() {
    cout << "Hello World" << endl; // important line
    return 0;
}

在那里你告诉编译器,在这个作用域中打开std命名空间。所以你可以使用cout而不使用std::。这可能会被误认为是更有效的编码。但是你会在某个时候遇到问题。
在命名空间std中定义了成百上千个函数或者常量等等,大多数时候你不会去管这些,但是如果你在一个地方定义了一个同名同参数的函数,你几乎找不到错误。例如,有std::find。可能有机会你定义了相同的函数。这种情况下的编译器错误是一个痛苦的问题。所以我强烈建议您使用using namespace std;

j8ag8udp

j8ag8udp2#

它不是“include”的同一个函数。此语句允许您访问std命名空间中定义的任何类、函数或类型,而无需在类或函数名称前键入“std::“。
示例:如果要在std命名空间中声明字符串类型的变量
不使用“”,使用命名空间std;“

#include <string>
...
std::string str1;
std::string str2;

with“使用命名空间std;“

#include <string>
using namespace std;
...
string str1;
string str2
ckocjqey

ckocjqey3#

using指令using namespace std使命名空间std中的名称成为当前作用域中使用的匹配名称的候选。
例如,在

#include <vector>
using namespace std;

int main()
{
    vector<int> v;
}

名称vector存在于命名空间std中(作为模板类)。在main()中,当它看到名称vector的用法时,以前的using namespace std会导致编译器在std中查找与vector匹配的名称。它找到std::vector,因此使用-,然后v具有实际类型std::vector<int>
using指令与预处理器#include的功能不同。在上面的代码中,#include <vector>被替换为带有标准头文件<vector>内容的预处理器。该头文件的内容声明了模板化的std::vector类及其相关内容。
如果从上面的示例中删除#include <vector>,并保留using namespace std,则代码将不会编译,因为编译器看不到<vector>的内容。
相反,如果删除using namespace std但保留#include <vector>,则代码将无法编译,因为名称vector位于名称空间std中,并且不会在该名称空间中搜索与vector匹配的名称。
当然,您可以将上面的代码更改为

#include <vector>

int main()
{
    std::vector<int> v;
}

在这种情况下,std::vector的使用显式地告诉编译器在名称空间std中查找名称vector
在某些情况下,使用using namespace std也是不可取的,但我将把了解这一点作为一项练习。

相关问题