在使用LLVM2.0的Xcode中,当我将行usingnamespacestd;放入我的C++代码中时,我收到以下警告:SemanticIssueUsingdirectivereferstoimplicitly-definednamespace'std'有没有办法解决这个问题?为什么会发出这样的警告? 最佳答案 您是否包含任何标准头文件?否则编译器不知道namespacestd.请发布更多代码以澄清。 关于c++-LLVM编译器2.0:Warningwith"usingnamespace
在使用LLVM2.0的Xcode中,当我将行usingnamespacestd;放入我的C++代码中时,我收到以下警告:SemanticIssueUsingdirectivereferstoimplicitly-definednamespace'std'有没有办法解决这个问题?为什么会发出这样的警告? 最佳答案 您是否包含任何标准头文件?否则编译器不知道namespacestd.请发布更多代码以澄清。 关于c++-LLVM编译器2.0:Warningwith"usingnamespace
考虑以下程序。它的格式是否符合c++标准(需要引用标准的相关部分):namespaceX{externinti;}namespaceN{usingX::i;}intN::i=1;intmain(){}对于不同的编译器,我得到了不同的结果。我正在尝试找出我应该为哪个编译器提交错误报告:Clang:给出以下编译器错误:命名空间“N”中没有名为“i”的成员GCC和VisualC++编译它没有错误。为了比较,以下给出了所有三个编译器的编译器错误:namespaceX{voidf();}namespaceN{usingX::f;}voidN::f(){};intmain(){}
考虑以下程序。它的格式是否符合c++标准(需要引用标准的相关部分):namespaceX{externinti;}namespaceN{usingX::i;}intN::i=1;intmain(){}对于不同的编译器,我得到了不同的结果。我正在尝试找出我应该为哪个编译器提交错误报告:Clang:给出以下编译器错误:命名空间“N”中没有名为“i”的成员GCC和VisualC++编译它没有错误。为了比较,以下给出了所有三个编译器的编译器错误:namespaceX{voidf();}namespaceN{usingX::f;}voidN::f(){};intmain(){}
假设以下代码:namespacetest{namespacedetail{}inlinenamespacev1{namespacedetail{voidfoo(){}}}}intmain(){test::detail::foo();}Aswecansee,这段代码用Clang编译;不是withGCC,但是-GCC提示对namespacedetail的引用不明确:main.cpp:20:11:error:referenceto'detail'isambiguoustest::detail::foo();^main.cpp:4:5:note:candidatesare:namespacet
假设以下代码:namespacetest{namespacedetail{}inlinenamespacev1{namespacedetail{voidfoo(){}}}}intmain(){test::detail::foo();}Aswecansee,这段代码用Clang编译;不是withGCC,但是-GCC提示对namespacedetail的引用不明确:main.cpp:20:11:error:referenceto'detail'isambiguoustest::detail::foo();^main.cpp:4:5:note:candidatesare:namespacet
假设我有一个在全局范围内具有"C"链接的函数。extern"C"intfun(int);如果我想让它在命名空间中可见,我会这样做:namespacefoo{using::fun;}但在此之后,除了foo::fun(0)之外,我仍然可以将其称为::fun(0)。所以我的问题是,有没有办法禁止从全局命名空间调用函数fun并且只允许从namespacefoo调用它? 最佳答案 标准明确规定,外部C函数在命名空间内声明,即使C不知道命名空间:7.5/4:Alinkagespecificationdoesnotestablishascope.
假设我有一个在全局范围内具有"C"链接的函数。extern"C"intfun(int);如果我想让它在命名空间中可见,我会这样做:namespacefoo{using::fun;}但在此之后,除了foo::fun(0)之外,我仍然可以将其称为::fun(0)。所以我的问题是,有没有办法禁止从全局命名空间调用函数fun并且只允许从namespacefoo调用它? 最佳答案 标准明确规定,外部C函数在命名空间内声明,即使C不知道命名空间:7.5/4:Alinkagespecificationdoesnotestablishascope.
有令人信服的论据againstusingnamespacestd,那么为什么它被引入到语言中呢?不是usingnamespace打败命名空间的目的?我为什么要写usingnamespace?有什么我不知道的问题可以通过usingnamespace优雅地解决吗?,也许在usingstd::swap的行中成语之类的? 最佳答案 一方面,这是在命名空间中使用运算符重载的方式(例如usingnamespacestd::rel_ops;或usingnamespaceboost::assign;)简洁也是一个强有力的论据。你真的喜欢输入和阅读s
有令人信服的论据againstusingnamespacestd,那么为什么它被引入到语言中呢?不是usingnamespace打败命名空间的目的?我为什么要写usingnamespace?有什么我不知道的问题可以通过usingnamespace优雅地解决吗?,也许在usingstd::swap的行中成语之类的? 最佳答案 一方面,这是在命名空间中使用运算符重载的方式(例如usingnamespacestd::rel_ops;或usingnamespaceboost::assign;)简洁也是一个强有力的论据。你真的喜欢输入和阅读s