草庐IT

inline-namespaces

全部标签

c++ - 'using' 和 'using namespace' 之间的区别

在boost库中,经常有包含库的例子:#pragmaonce#includeusingboost::property_tree::ptree;在我的整个程序中,我一直在导入这样的命名空间:#include"../MyClass.h"usingnamespaceMyClassNamespace;谁能解释一下:using和usingnamespace的区别;否定使用usingnamespace有利于using;前向声明using和usingnamespace的区别;谢谢 最佳答案 usingnamespace使命名空间的所有名称可见,而

c++ - Qt 创建者 : “inline function used but never defined” – why?

为什么我在QtCreator中收到此警告:`inlinefunction'boolLion::growl()'usedbutneverdefined?我仔细检查了我的代码,并有一个声明inlineboolgrowl()inLion(lion.h)以及lion.cpp中对应的实现:inlineboolLion::growl()发生了什么事?编辑:我的假设是在.cpp文件中定义实际的内联方法是合法的(inline关键字提醒编译器在其他地方寻找方法主体),或者我是搞错了?我不想让我的头文件与实现细节杂乱无章。 最佳答案 好吧,我不知道确切

C++ 标准 : do namespace-scoped constexpr variables have internal linkage?

假设我们有一个标题foo.h包含以下内容:#ifndefFOO_H_#defineFOO_H_namespacefoo{constexprstd::string_viewkSomeString="blah";}#endif//FOO_H_foo::kSomeString是否保证在包含foo.h的任何翻译单元中具有内部链接?这在C++11和C++17之间是否有所不同?在标准草案中[basic.link]/3说Anamehavingnamespacescopehasinternallinkageifitisthenameof[...]anon-inlinevariableofnon-vol

c++ - 匿名命名空间内的 "using namespace"语句

当在匿名命名空间中使用usingnamespace语句时,将使用的命名空间带入文件范围?例如:namespacefoo{intf(){return1;}}namespace{usingnamespacefoo;}inta(){returnf();//Willthiscompile?} 最佳答案 根据7.3.4[namespace.udir]第4段,命名空间指令是可传递的:Forunqualifiedlookupnominatesasecondnamespacethatitselfcontainsusing-directives,th

c++ - 在 C++ 中,编译器将函数对象设为 "inline"意味着什么?

在维基百科articleaboutfunctionobjects它说这些对象在与for_each一起使用时具有性能优势,因为编译器可以“内联”它们。我对这在这种情况下的确切含义有点模糊......或者我不好意思说的任何情况。感谢您的帮助! 最佳答案 for_each的最后一个参数|模板是一个仿函数。Functor是可以使用()来“调用”的东西。运算符(可能带有参数)。根据定义,有两种不同的仿函数:普通的非成员函数是仿函数。重载的类类型对象()运算符(所谓的函数对象)也是仿函数。现在,如果您想使用普通函数作为for_each的仿函数,

c++ - "Inline"带有初始化列表的对象的静态声明

抱歉标题太尴尬了,但我找不到更好的。考虑这个示例代码(除了说明问题之外没有其他目的):#includevoidFooBar(int);voidfunc1(){staticstd::vectorvec{1,2,3,4};for(auto&v:vec)FooBar(v);}voidfunc2(){for(auto&v:std::vector{1,2,3,4})FooBar(v);}这个的反汇编可以找到here在func1静态vecvector应该在启动时一劳永逸地构建。实际上上面提到的godbolt上的反汇编表明静态vec的初始化仅在第一次调用func1时完成而不是在启动时,但这不是重点。

c++ - C++ 链接器是否会自动内联函数(没有 "inline"关键字,在 header 中没有实现)?

C++链接器是否会自动内联“传递”函数,这些函数未在header中定义,也未通过inline关键字明确要求“内联”?例如,以下情况经常发生,并且应该总是受益于“内联”,似乎每个编译器供应商都应该“自动”通过“通过链接器内联”(在可能的情况下)://FILE:MyA.hppclassMyA{public:intfoo(void)const;};//FILE:MyB.hppclassMyB{private:MyAmy_a_;public:intfoo(void)const;};//FILE:MyB.cpp//PLEASESAYTHISFUNCTIONIS"INLINED"BYTHELINK

C++ : Extern C Functions inside a Namespace

我必须链接两个库,比如A和B。其中一些文件在两个库中是通用的。所以,我在命名空间内的库A中声明函数,比如abc。因此,在A和B中,函数func如下所示:[inA]namespaceabc{extern"C"voidfunc();}[inB]extern"C"voidfunc();在构建项目时,编译器会抛出链接错误,说明函数func的多个定义。是不是命名空间内的A中的函数func或者外部“C”函数是否存在问题。如果有,那么我该如何区分它们呢? 最佳答案 当您使用Extern"C"时,您将关闭名称修饰,因此您会丢失命名空间信息,因为C没

c++ - 在 C++ 中的 "using namespace::X"中的前导::是什么意思

谁能解释一下以下命名空间用法之间的区别:使用命名空间::layer::module;和使用命名空间层::module;是什么导致layer之前额外的::? 最佳答案 如果在以下上下文中使用会有所不同:namespacelayer{namespacemodule{intx;}}namespacenest{namespacelayer{namespacemodule{intx;}}usingnamespace/*::*/layer::module;}使用初始::第一个x将在using指令之后可见,没有它第二个x在nest::layer:

c++ - 什么需要我声明 "using namespace std;"?

这个问题可能是重复的,但我找不到一个好的答案。简简单单,需要我声明什么usingnamespacestd;在C++程序中? 最佳答案 自从C++标准被接受以来,几乎所有的标准库都在std命名空间内。因此,如果您不想使用std::限定所有标准库调用,则需要添加using指令。然而,usingnamespacestd;被认为是一种不好的做法,因为您实际上是在导入整个标准命名空间,从而为名称冲突提供了很多可能性。最好只导入您在代码中实际使用的内容,例如usingstd::string; 关于c