LLVM 编译器 2.0:警告“使用命名空间 std”

发布于 2024-09-27 23:54:37 字数 201 浏览 4 评论 0原文

在使用 LLVM 2.0 的 Xcode 中,当我将 using namespace std; 行放入我的 C++ 代码中时,我收到以下警告:

语义问题
using 指令引用隐式定义的命名空间“std”

有没有办法解决这个问题?为什么会发出这样的警告?

In Xcode using LLVM 2.0, when I put the line using namespace std; in my C++ code, I get this warning:

Semantic Issue
Using directive refers to implicitly-defined namespace 'std'

Is there a way to fix this? Why is it giving that warning?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

弥枳 2024-10-04 23:54:37

您是否包含任何标准头文件?否则编译器不知道namespace std

请发布更多代码以澄清。

Have you included any standard header files? Otherwise the compiler doesn't know about namespace std.

Please post more code to clarify.

醉酒的小男人 2024-10-04 23:54:37

将 using 命名空间 std 移到 #include 之后可以消除此警告。

Moving the using namespace std to after the #include can eliminate this warning.

神回复 2024-10-04 23:54:37

我这样解决了这个问题

#include <iostream>

using namespace std;
/// This function is used to ensure that a floating point number is
/// not a NaN or infinity.
inline bool b2IsValid(float32 x)
{
    if (x != x)
    {
        // NaN.
        return false;
    }
    float32 infinity = std::numeric_limits <float32>::infinity();
    return -infinity < x && x < infinity;
    return true;

}

i solved this problem like this

#include <iostream>

using namespace std;
/// This function is used to ensure that a floating point number is
/// not a NaN or infinity.
inline bool b2IsValid(float32 x)
{
    if (x != x)
    {
        // NaN.
        return false;
    }
    float32 infinity = std::numeric_limits <float32>::infinity();
    return -infinity < x && x < infinity;
    return true;

}
廻憶裏菂餘溫 2024-10-04 23:54:37

我发现这个问题已经很老了,但是对于将来检查这个问题的人来说,我想添加 LLVM 文档中的这个链接作为讨论的补充,并供人们寻找更多信息:

LLVM 编码标准:不要使用 using namespace std;

我相信标题很能说明为什么我分享它来帮助解决这个问题。

在 LLVM 中,我们更喜欢使用“std::”前缀显式地为标准命名空间中的所有标识符添加前缀,而不是依赖于“using namespace std;”。

在头文件中,添加“using namespace XXX”指令会污染 #include 头文件的任何源文件的命名空间。这显然是一件坏事。

编辑:
因此,如果使用“使用 std 命名空间;”对于要使用标准库的每种情况,显式键入 std:: 。它避免了与源文件名称空间的冲突。这就是文章上面引用的建议。

I see that this question is pretty old, but for anyone checking this out in the future, I wanted to add this link from the LLVM documentation as a supplement to the discussion and for poeple looking for more info:

LLVM Coding Standards: Do Not use using namespace std;

I believe that the title is pretty indicative of why I've shared it to help with this question.

In LLVM, we prefer to explicitly prefix all identifiers from the standard namespace with an “std::” prefix, rather than rely on “using namespace std;”.

In header files, adding a 'using namespace XXX' directive pollutes the namespace of any source file that #includes the header. This is clearly a bad thing.

Edit:
So instead if using 'using std namespace;' explicitly type std:: for every case where you with to use the standard library. It avoids conflicts with source file namespaces. This is what the quote above from the article advises.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文