g ++坚持使用std :: string而不是string

时间:2014-03-28 02:52:09

标签: c++ namespaces g++ std

我写了一个简单的程序如下:

#include <iostream>
#include <string>
int main()
{
   string a;
   std::cin >> a;
   std::cout << a << std::endl;
   return 0;
}

无法编译,编译器建议我使用std::string而不是string。 使用std::string后,一切都很好。

我的问题是为什么我的程序需要使用std::string才能成功编译?

2 个答案:

答案 0 :(得分:1)

string类位于命名空间std中。您可以删除std::

的范围

您最好将其包含在main函数中,因此如果您使用使用名称字符串或cout的库,则名称不会更正。

#include <iostream>
#include <string>

int main()
{
  using namespace std;
  string a;
  cin >> a;
  cout << a << endl;
  return 0;
}

答案 1 :(得分:0)

string位于std名称空间中,只有std::string而不是string才有效(std::cin std::vector string { 1}}等)。但是,在实践中,一些编译器可能会使用std::等程序而不使用std::前缀编译,这使得一些程序员认为可以省略#include <iostream> #include <string> int main() { std::string a; std::cin >> a; std::cout << a << std::endl; return 0; } ,但它可以#39} ; s不在标准C ++中。

所以最好使用:

using namespace std;

请注意,使用std::并不是一个好主意(尽管它是合法的),尤其不要将其放在标题中。

如果您厌倦了键入所有#include <iostream> #include <string> using std::string; using std::cin; using std::cout; using std::endl; int main() { string a; cin >> a; cout << a << endl; return 0; } ,请声明所有带有命名空间的名称使用是一个选项:

{{1}}