考虑以下程序。它的格式是否符合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
我正在开发一个跟踪字符串中字母频率的应用程序。为此,我创建了以下结构structMessageLetter{charletter;intcount;MessageLetter(charletter,intfreq):letter(letter),count(freq){}};现在我正在尝试创建一个如下所示的STL::map...std::maplList;for(inti=0;i当我尝试编译它时,我得到以下...test.cpp:95:8:error:notemplatenamed'map'innamespace'std';didyoumean'max'?std::maplList;我
我正在开发一个跟踪字符串中字母频率的应用程序。为此,我创建了以下结构structMessageLetter{charletter;intcount;MessageLetter(charletter,intfreq):letter(letter),count(freq){}};现在我正在尝试创建一个如下所示的STL::map...std::maplList;for(inti=0;i当我尝试编译它时,我得到以下...test.cpp:95:8:error:notemplatenamed'map'innamespace'std';didyoumean'max'?std::maplList;我