有什么需要指定"std"前缀?

0x0*_*0x0 4 c++ std

我是编程的初学者,std如果他们使用任何std函数std::cout,我常常看到很多使用前缀的程序std::cin,等等.我想知道它的目的是什么?它只是一种良好的编程方式还是有更多的东西?它对编译器有什么影响,还是可读性或者是什么?谢谢.

Eri*_*rik 12

C++有一个命名空间的概念.

namespace foo {
  int bar();
}

namespace baz {
  int bar();
}
Run Code Online (Sandbox Code Playgroud)

这两个函数可以共存而不会发生冲突,因为它们位于不同的名称空间中.

大多数标准库函数和类都位于"std"命名空间中.要访问例如cout,您需要按优先顺序执行以下操作之一:

  • std::cout << 1;
  • using std::cout; cout << 1;
  • using namespace std; cout << 1;

您应该避免using使用上述foo和baz命名空间的原因.如果你有using namespace foo; using namespace baz;任何试图打电话bar()会很模糊.使用命名空间前缀是明确而准确的,也是一个好习惯.


Jar*_*Par 11

STL类型和函数在名为的命名空间中定义std.该std::前缀用于使用类型不完全,包括std命名空间.

选项1(使用前缀)

#include <iostream>

void Example() {
  std::cout << "Hello World" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

选项#2(使用命名空间)

#include <iostream>
using namespace std;

void Example() {
  cout << "Hello World" << endl;
}
Run Code Online (Sandbox Code Playgroud)

选项#3(单独使用类型)

#include <iostream>
using std::cout;
using std::endl;

void Example() {
    cout << "Hello World" << endl;
}
Run Code Online (Sandbox Code Playgroud)

注意:除了不必为每个类型/方法添加前缀std::(特别是在头文件中完成)文件之外,包含整个C++命名空间(选项#2)还有其他含义.许多C++程序员都避免这种做法,而更喜欢#1或#3.