草庐IT

C++ 内联函数原型(prototype)

我遇到了一个头文件,其中包含各种内联和常量函数原型(prototype)声明:inlineboolFoo1()const;inlineboolFoo2()const;inlineboolFoo3()const;...我知道inline关键字允许编译器在调用时(可能)扩展函数,但为什么不包括函数体?如果定义包含在头文件中对我来说更有意义:inlineboolFoo1()const{returnm_Foo1;};inlineboolFoo2()const{returnm_Foo2;};inlineboolFoo3()const{returnm_Foo3;};...在原型(prototype

C++ `inline` 关键字和编译器优化

我一直听说inline关键字不再用作现代编译器的提示,而是用于避免多源项目中的多重定义错误。但是今天遇到了编译器服从关键字的例子。没有inline关键字,如下代码#includeusingnamespacestd;voidfunc(constintx){if(x>3)cout使用命令g++-O3-Sa.cpp,生成func未内联的汇编代码。但是,如果我在func的定义前添加inline关键字,func将被内联到main中。生成的汇编代码部分为.LC0:.string"HAHA\n".LC1:.string"KKK\n".text.p2align4,,15.globl_Z4funci.t

c++ - 内联调用不太可能失败,代码大小会增加 [-Winline] 但不使用内联

对C++很陌生。这是我的用户定义的fmiNode类:(fmi.h)classfmiNode{public:fmiNode(std::stringNodeName,intAddress){this->name=NodeName;this->address=Address;}std::stringGetName(){returnthis->name;}intGetAddress(){returnthis->address;}private:std::stringname;intaddress;};这是我的主要方法(fmi.c)intmain(intargc,char*argv[]){fmi

c++ - 讨论为什么没有内联虚函数

嗨,我和我的friend讨论过为什么没有内联虚函数。我的回答是内联函数是在编译时,虚函数是在动态时绑定(bind)。在编译时没有办法知道哪个函数会调用虚函数。所以内联虚函数不是一个好主意。但是,他说,这是不正确的。他的回答是inlinefunction没有地址,所以在virtualtable中没办法放inlinefunction的地址,所以没有inlinevirtualfunction。我想知道三点:我的回答是否正确?我觉得我的回答是对的。内联函数没有地址吗?我想它有地址;连内联函数都有地址,他的回答比我的?非常感谢! 最佳答案 我

C++ - CPP 和 H 中定义的内联有什么区别

这不是一个“我有这个问题”的问题,而是一个“我真的很想了解该语言如何更好地工作”的问题。我最近开始遇到在给定类的.cpp文件中定义内联功能。我想了解内联功能的定义点之间的区别实际上是什么。在对CPP中定义的内联进行对象级分析时,似乎有更高百分比的C++中声明的内联(与在.h中定义的相反)被优化为映射函数而不是合法内联-是这是主要区别,或者这背后是否还有其他我没有看到的目的。 最佳答案 没有区别。inline是对编译器的提示,但现在并不是特别重要,因为编译器非常擅长在没有您帮助的情况下确定是否内联扩展函数(参见register关键字)

c++ - 仅在 C/C++ 中使用 header 时?

像“vec3”这样的类通常只使用一个标题吗?这是我的实际代码:#ifndefVECTOR3_H#defineVECTOR3_H#includeclassvec3{public:doublex,y,z;vec3();vec3(doublex,doubley,doublez):x(x),y(y),z(z){}doublelenght(){returnsqrt(pow(x,2)*pow(y,2)*pow(z,2));}doublelenghtSquared(){returnpow(x,2)+pow(y,2)+pow(z,2);}doubledistance(vec3v){returnsqrt

c++ - 定义内联函数的正确方法是什么?

假设我有一个类X(X.h):classX{private:unsignedunitsSold=0;doublerevenue=0.0;public:doubleavgPrice();}avgPrice()应该怎么定义?Option1(类里面):X.hclassX{private:unsignedunitsSold=0;doublerevenue=0.0;public:doubleavgPrice(){returnunitsSold?revenue/unitsSold:0;}}Option2(在与类相同的文件中,但在类定义之外):X.hclassX{private:unsigneduni

c++ - c++ 内联显式构造函数有什么用?

这个问题在这里已经有了答案:Whatdoestheexplicitkeywordmean?(11个答案)关闭8年前。我有时会看到这个构造函数使用内联显式编写。例如:protected:inlineexplicitSingleton(){CCASSERT(Singleton::instance_==0,"errorSingleton::instance_==0.");Singleton::instance_=static_cast(this);}inline~Singleton(){Singleton::instance_=0;}内联显式有什么好处?

c++ - 使用简短且定义可用的虚拟方法进行优化?

我只是想知道是否大多数编译器都可以进行以下优化classA{virtualvoidf(){m=5;}voidg(){f();}intm;};f()是一个虚函数,因此不是内联的。但是,由于f()的定义简短且可用,编译器能否优化g()以将f()调用为内联? 最佳答案 canthecompileroptimizeg()forcallingf()asinlinesincethedefinitionoff()isshortandavailable?这很复杂。g()可以内联,这样调用A::g()会生成与调用A::f()相同的优化代码.如果您从A

c++ - 内联函数体的潜在评估和模板成员的实例化

何时包含在标记为内联的函数中的表达式被视为“可能已评估”?a.cpptemplateconstT&foo(constT&arg){returnarg;}inlinevoiddead(){intx(21);x=foo(x);}b.cpp#includetemplateconstT&foo(constT&);intmain(intargc,char*argv[]){std::cout如果一旦定义了内联函数,表达式就被认为是“潜在求值”,那么模板应该被实例化,我希望$(CCC)-ca.cpp;$(CCC)-cb.cpp;$(CCC)a.ob.o-obin链接成功。相反,如果声明为内联的函数中