草庐IT

c++ - 为什么内联我的访问器会破坏我的代码?

我遇到了一个奇怪的问题,即尝试内联我的“Person”类的访问器导致代码无法编译。以下代码将编译并运行成功(使用VisualStudio2012):Person.h#pragmaonce#includeusingnamespacestd;classPerson{public:Person(stringname,intage=0);~Person(void);//Accessorsstringname(void)const;intage(void)const;private:stringm_name;intm_age;};Person.cpp#include"stdafx.h"#incl

c++ - 如何使用 Rcpp 和内联设置 g++ 编译器标志?

我想设置-std=c++0x,使用带内联的Rcpp。我看到了R:C++Optimizationflagwhenusingtheinlinepackage但不想在系统范围内进行更改,所以我在Dirk的回答中尝试了选项2。我试过:settings=getPlugin("Rcpp")settings$Makevars[length(settings$Makevars)+1]="CXXFLAGS=$(CXXFLAGS)-std=c++0x"fun=cxxfunction(signature(x_="numeric"),src,plugin="Rcpp",settings=settings,ve

C++ gcc 字符串内联

我想在运行时通过汇编指令强制将字符串动态分配到局部变量中,没有字符串占用数据部分中的内存(例如读取只有数据部分)。以下似乎完美地工作:charfoo[]="bar";汇编代码变为:movl$7496034,40(%esp)因此,foo在运行时通过movl指令用"bar"初始化。我怎样才能强制它发生在所有字符串操作上?例如,如果我将字符串文字传递给函数:testfunc("bar");在这种情况下,字符串"bar"将被分配到一个节中。 最佳答案 您展示的技术仅适用于您的特殊情况。通常,编译器可以随意将字符串的内容放入段中。例如,通过这

c++ - gcc 与 clang : inlining a function with -fPIC

考虑这段代码://foo.cxxintlast;intnext(){return++last;}intindex(intscale){returnnext()使用gcc7.2编译时:$g++-std=c++11-O3-fPIC这发出:next():movqlast@GOTPCREL(%rip),%rdxmovl(%rdx),%eaxaddl$1,%eaxmovl%eax,(%rdx)retindex(int):pushq%rbxmovl%edi,%ebxcallnext()@PLT##next()notinlined,callthroughPLTmovl%ebx,%ecxsall%cl

c++ - 虚函数可以内联吗

这个问题在这里已经有了答案:Areinlinevirtualfunctionsreallyanon-sense?(13个答案)inlinevirtualfunction(3个答案)关闭9年前。如果我这样定义一个类:classA{public:A(){}virtual~A(){}virtualvoidfunc(){}};是不是说虚析构函数和func是内联的

c++ - constexpr 和 inline 函数可以重新定义吗?

我正在验证C++Primer上的声明:Unlinkeotherfunctions,inlineandconstexprfunctionsmaybedefinedmultipletimesintheprogram.我在下面使用了两个constexprcfunc()的定义,预计foo_0()将调用第一个def而foo_1()将调用2nddef。然而,尝试因编译错误而失败(最后)。为什么?constexprintcfunc(){return42;}intfoo_0(){returncfunc();}constexprintcfunc(){return42;}intfoo_1(){return

c++ - 静态内联方法?

好的,这是我正在尝试做的...现在正在编译但无法链接...LNK2001我希望这些方法是静态的,因为没有成员变量,但我也希望它们内联以提供加速。最好的方法是什么?简而言之,这是我所拥有的:/*foo.h*/classfoo{staticvoidbar(float*in);};/*foo.cpp*/inlinevoidfoo::bar(float*in){//somedarkmagichere}我正在尝试这样做,因为我希望能够:foo::bar(myFloatPtr);foo没有任何成员变量……这没有意义。 最佳答案 如果您从foo.

c++ - 我什么时候应该使用 -inl.h 文件?

我刚刚注意到thisitem在GoogleC++CodingStyleGuide-我不太明白。如果我把一个内联方法或函数放在一个文件中,而不是其他文件包含的头文件中,它就不是类的方法;并且它只能用于包含它的代码位。那么为什么还要有这样的-inl.h文件呢?另外,为什么我们还要内联长函数呢?(即除了模板的情况,当我们必须将代码放在头文件中进行实例化时) 最佳答案 IjustnotedthisitemintheGoogleC++CodingStyleGuide-andIdon'tquitegetit.请对指南持保留态度。许多指南旨在帮助

c++ - 默认的构造函数和析构函数是内联的吗?

我很好奇编译器生成的默认构造函数和析构函数是否是内联的,因为无论哪种方式我都可以证明。一方面,您希望默认构造函数/析构函数不是内联的,这样以后添加它们就不会破坏ABI(因为只有默认值存在时编译的目标文件将内联生成的定义而不是你定义的)。另一方面,对于C++编译器编译的C代码,其性能与使用C编译器编译时一样好,它不能为每个分配的结构添加构造函数/析构函数调用,而在C++中,类之间的唯一功能区别一个结构应该是默认的访问保护。也许链接器以某种方式解决了这个问题?也许答案因编译器而异?这个问题的结果:如果我在C++中有一个POD结构,理论上我可以通过自己定义空的内联构造函数/析构函数来代替默认

c++ - 我可以将此宏更改为内联函数而不影响性能吗?

(编辑:让我们将其命名为“测量如何出错的教训。”但我仍然没有弄清楚究竟是什么导致了差异。)我发现了一个非常快的整数平方根函数here通过马克·克朗。至少在我的机器上使用GCC,它显然是我测试过的最快的整数平方根函数(包括Hacker'sDelight、thispage和标准库中的floor(sqrt())中的函数)。稍微清理一下格式、重命名变量并使用固定宽度类型后,它看起来像这样:staticuint32_tmcrowne_isqrt(uint32_tval){uint32_ttemp,root=0;if(val>=0x40000000){root=0x8000;val-=0x4000