草庐IT

autoload_namespaces

全部标签

c++ - 当内部范围不起作用时,为什么编译器不采用 namespace 名称?

我认为我非常了解名称查找(在观看了几个有关它的视频并阅读了大量内容之后)但我只是遇到了这种情况:#includenamespacetest{structId{};voiddo_something(constId&){std::cout尖线不编译(在GCC4.8和VC11U2上)因为它试图使用成员函数test::Test::do_something()而不是命名空间作用域的test::do_something(constId&)这似乎是唯一可能的候选对象。显然,成员函数名称隐藏了命名空间范围内的名称,这让我感到惊讶,因为我记得在其他上下文中使用了几乎相似的代码而没有产生这个问题(但最终情

c++ - 氧气/C++ : how to link to anonymous namespace variables

我正在使用Doxygen来记录我的代码。许多代码在定义常量的cpp文件中都有匿名namespace。我已经设置:EXTRACT_ANON_NSPACES=YES在我的Doxygen文件中,所有匿名命名空间都按需要进行了记录。我的问题是我想引用匿名命名空间中的变量。例如,假设其中一个命名空间在我的Doxygen文档中定义在MyClass::anonymous_namespace{MyFile.cpp}::kMyConstant下。我认为另一个注释block(例如,一个函数)可以链接到该常量,例如:@seeMyClass::anonymous_namespace{MyFile.cpp}::

c++ - boost 是否使用 C++11 "inline namespaces"来避免运行时出现 ABI 不兼容错误?

C++11具有称为“内联命名空间”的功能,它允许作者在链接时强制执行ABI兼容性,而无需篡改API。例如,来自@HowardHinnant的这些有用的答案解释了libc++如何使用内联命名空间:Usinglibstdc++compiledlibrarieswithclang++-stdlib=libc++Whycan'tclangwithlibc++inc++0xmodelinkthisboost::program_optionsexample?我的问题是:boost是否利用了这个C++11特性?看起来一些boost开发者至少是thinking最终一次使用它。但是那个线程很旧。它曾经发

c++ - 声明 `using namespace C;` 对于证明 [namespace.udir]/3 中示例中显示的结果至关重要

据我所知,usingnamespaceC;下面在namespaceD中的声明对于编译器提示歧义是必要的qualified-idsB::C::i和A::i在下面的代码中,这是一个例子[namespace.udir]/3中的C++标准:namespaceA{inti;namespaceB{namespaceC{inti;}usingnamespaceA::B::C;voidf1(){i=5;//OK,C​::​ivisibleinBandhidesA​::​i}}namespaceD{usingnamespaceB;//usingnamespaceC;voidf2(){i=5;//ambi

c++ - 全局范围内的匿名 namespace 内的名称可以有前导下划线吗?

根据规范,不允许使用前导下划线的全局名称:17.4.3.1.2Globalnames—Eachnamethatbeginswithanunderscoreisreservedtotheimplementationforuseasanameintheglobalnamespace.这是否也适用于在顶级匿名命名空间中定义的名称? 最佳答案 以前导下划线开头,后跟非大写字母数字字符且不包括双下划线的名称仅在全局命名空间中保留。这样做的原因是在某些系统上某些名称需要有一个前导下划线或者已经被底层操作系统和/或其C库使用。匿名命名空间中的名称

c++ - 为什么类型特征不适用于 namespace 范围内的类型?

我正在为我的C++序列化库设计类型注册功能。但是我遇到了一个关于类型特征的奇怪问题。我正在使用VisualStudio2017和/std:c++latest。#includeintreg(...);templateconstexprboolis_known=!std::is_same_v;//-----fortype1inglobalscope------structtype1{};voidreg(type1*);static_assert(is_known);//success//-----fortype2innamespacescope----namespacens{structt

c++ - namespace 的前向声明

namespaceCounterNameSpace{intupperbound;intlowerbound;usingnamespaceNS;//Error}namespaceNS{inti;}//...namespaceNS{intj;}在上面的例子中,它显示了一个错误。错误C2871:“NS”:具有此名称的命名空间不存在我知道如果我在反命名空间问题得到解决之前定义NS。但是只想知道c++中是否存在命名空间的前向声明之类的东西。这样就可以在不定义NS之前解决上述问题counternamespace。请帮忙。 最佳答案 没有人说命名

c++ - namespace 、类和自由函数——什么时候需要完全限定的名称

在我下面的示例中,为什么我必须完全限定cpp中的自由函数的名称以避免链接器错误,为什么它适用于没有的类函数?你能解释一下区别吗?ctest.h:namespaceTest{intFreeFunction();classCTest{public:CTest();~CTest();};}ctest.cpp:#include"ctest.h"usingnamespaceTest;//intFreeFunction()->undefinedreferenceerrorintTest::FreeFunction()->worksjustfine{return0;}CTest::CTest()->

c++ - 为什么我不能从不同 namespace 中的友元类更改类的私有(private)成员?

我发现从好友类访问类的私有(private)成员时遇到问题。持有我要更改的私有(private)成员的类和进行更改的类在不同的命名空间中。friend类是在保存数据的类之后定义的,所以我尝试在命名空间外转发声明friend类。g++说我不能修改成员,因为它是私有(private)的,visualstudio好像觉得没问题。我是不是在做一些奇怪的非标准事情?为什么我不能更改成员?这是一个代表我的问题的简化片段:structS;namespaceN{classA{intm;public:A():m(5){};friendstructS;};}usingnamespaceN;structS{

c++ - 如何修复错误 : unknown type name ‘namespace’

#ifndefUNO_ACTION_#defineUNO_ACTION_namespaceUno{namespaceGame{classGame;}}//namespacenamespaceUno{namespaceAction{using::Uno::Game::Game;classAction{public:virtualboolisDisposeable()=0;virtualvoidtakeAction(Game*game)=0;virtual~Action(){}};}}#endif我在ubuntu12.04上编译这些代码,它返回错误集:action.h:4:1:error: