草庐IT

form-inline

全部标签

c++ - C+ +'s "inline"- 对 GCC 和 Clang/LLVM 的提示有多强?

在C++中,关键字“inline”有两个用途。首先,它允许定义出现在多个翻译单元中。其次,它是对编译器的一个提示,一个函数应该在编译后的代码中内联。我的问题:在GCC和Clang/LLVM生成的代码中,关键字“inline”是否与函数是否内联有关系?如果是,在什么情况下?还是完全忽略了提示?请注意,这不是语言问题,而是特定于编译器的问题。 最佳答案 [警告:不是C++/GCC专家]你需要阅读inlinehere.Also,this,forGCC/C99.Theextenttowhichsuggestionsmadebyusingth

c++ - 为什么在 C++ 中显式声明 "inline"

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:WhenshouldIwritethekeyword'inline'forafunction/method?所以这是一个困扰我一段时间的问题,我无法得到明确的答案。我的理解是,一个好的编译器通常会意识到内联函数既安全又有利,如果打开优化,它将内联所有此类函数,因为它们被明确标识为内联函数由程序员决定。此外,编译器会识别出内联函数何时不安全/不明智,并且在这种情况下会简单地忽略程序员对内联函数的请求。因此,我想知道将函数明确声明为内联函数有什么好处?只要打开优化,编译器就会内联它认为内联的所有函数,并且只内联那

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++ - 在 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++ - 隐式特殊函数 : when would they be ill-formed?

在C++11的ISO国际标准中,总结了c++2003和C++2011之间的差异。不同之处之一是:[diff.cpp03.special]Change:Implicitly-declaredspecialmemberfunctionsaredefinedasdeletedwhentheimplicitdefinitionwouldhavebeenill-formed.Rationale:Improvestemplateargumentdeductionfailure.Effectonoriginalfeature:AvalidC++2003programthatusesoneofthes

c++ - 错误 C1854 : cannot overwrite information formed during creation of the precompiled header in object file

foo.cpp(33918):fatalerrorC1854:cannotoverwriteinformationformedduringcreationoftheprecompiledheaderinobjectfile:'c:\somepath\foo.obj'就此咨询MSDN可以获得以下信息:Youspecifiedthe/Yu(useprecompiledheader)optionafterspecifyingthe/Yc(createprecompiledheader)optionforthesamefile.Certaindeclarations(suchasdeclara

c++ - Undefined Behavior 和 Ill-formed 之间的区别,不需要诊断消息

C++标准为unclear1行为提供了大量的定义,这意味着或多或少相同,但存在细微差别。阅读thisanswer,我注意到措辞“程序格式错误;不需要诊断”。实现定义与未指定行为的不同之处在于,前一种情况下的实现必须清楚地记录它正在做什么(在后一种情况下,它不需要),两者都是格式良好的。未定义行为与未指定行为的不同之处在于程序是错误(1.3.13)。否则,它们都有一个共同点,即该标准对实现将做什么没有任何假设或要求。除了1.4/8,它声明实现可能有扩展,这些扩展不会改变格式良好的程序的行为,但根据标准是格式不正确的,并且实现必须诊断这些的使用,但之后可以继续编译和执行格式错误的程序。格式

c++ - 为什么我在 "forming reference to reference type" map 中出现错误?

如果我需要使用引用,而我传递的数据无法更改类型,因此我无法真正存储指向它的指针,还有什么替代方法?代码:#include#include#includeusingnamespacestd;intmain(){stringtest;pairp=pair("Foo","Bar");map,string&>m;m[make_pair("aa","bb")]=test;return0;}错误:$g++MapPair.cpp/usr/include/c++/3.2.3/bits/stl_map.h:Ininstantiationofstd::map,std::string&,std::less>