gpt4 book ai didi

C++ 使用命名空间 std,使用 std::xxx 还是仅使用 std::x?

转载 作者:太空宇宙 更新时间:2023-11-04 14:54:32 24 4
gpt4 key购买 nike

我知道使用命名空间有更多的可能性。通过使用语法 using namespace std;一开始它正在加载所有 std命名空间,但我只使用了几个(coutcerrendlvectorstring)。

你建议我怎么做:

  1. using namesapace std - 全部加载?
  2. using std::cout; using std::endl; using std::cerr; using std::vector; using std::string - 加载我需要的内容?
  3. 在每个 cout 之前调用命名空间, cerr , endl , vector , string

最佳答案

通常,避免在头文件的全局范围内使用

例子:

#ifndef HEADER_H
#define HEADER_H

#include <string>

using std::string; // bad

string s();

#endif

如果你这样做,你就会强制每个包含标题的人都接受using:

#include "header.h" // also got `std::string`, which I perhaps didn't want

在实现文件或头文件中的内联函数体中,using 可以更自由地使用:

#ifndef HEADER_H
#define HEADER_H

#include <string>

template <class T>
std::string f(T t) // still explicitly qualifying here
{
using std::string; // OK
string s = "...";
// ...
}

#endif

但是,请注意,仅显式限定一切,即在各处编写std::stringstd::cout 等,是一个非常普遍接受的风格。我个人这样做:

#ifndef HEADER_H
#define HEADER_H

#include <string>

template <class T>
std::string f(T t) // explicitly qualifying here
{
std::string s = "..."; // and here, too
// ...
}

#endif

你肯定会听到很多有能力的程序员争论支持和反对它。我认识的每个有能力的程序员都同意的唯一一件事就是避免在我提到的第一种情况下使用

关于C++ 使用命名空间 std,使用 std::xxx 还是仅使用 std::x?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24307285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com