在使用LLVM 2.0的Xcode中,当我在我的C++代码中添加
using namespace std;
这一行时,会出现以下警告:
语义问题
使用指令引用了隐含定义的命名空间'std'
有没有办法修复它?为什么会出现这个警告?
using namespace std;
这一行时,会出现以下警告:
语义问题
使用指令引用了隐含定义的命名空间'std'
有没有办法修复它?为什么会出现这个警告?
你是否包含了任何标准头文件?否则编译器就不知道 namespace std
是什么。
请贴出更多代码以澄清问题。
using namespace std;
这行代码是文件中除了 #ifndef
和 #define
语句之外的第一行代码;我将它移动到了 #include <iostream>
这行代码之后,警告消失了。GCC从来没有给出过这个警告,所以我之前从来没有想过这个问题。谢谢! - jstm88#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;
}
我看到这个问题已经很老了,但是对于未来查看此内容的任何人,我想添加LLVM文档中的此链接作为讨论的补充和寻找更多信息的人:
LLVM编码标准:不要使用using namespace std;
我认为标题已经非常明显,说明了我为什么分享它以帮助解决这个问题。
在LLVM中,我们更喜欢使用“std ::”前缀显式地为标准命名空间中的所有标识符添加前缀,而不是依赖于“using namespace std;”。
在头文件中,添加“using namespace XXX”指令会污染任何包含头文件的源文件的命名空间。这显然是一件坏事。
编辑: 因此,不要使用'using std namespace;',而是在每个需要使用标准库的情况下显式地键入std ::。它避免了与源文件命名空间的冲突。这就是上面引用文章建议的做法。
using namespace std;
。这不符合规范,因此clang会发出警告。 - Johannes Schaub - litbusing namespace std;
和#include <iostream>
。另一个是#include "sqlite3.h"
。该类已经完成;无论我添加哪个 C++ 头文件,都会出现using namespace std;
。 - jstm88