草庐IT

c++ - 如何用支持 __LINE__ 和 __FILE__ 的内联函数替换我的 C++ 异常宏?

我目前正在阅读ScottMeyers的《EffectiveC++》一书。它说对于类似函数的宏,我应该更喜欢inline函数而不是#define。现在我尝试编写一个内联函数来替换我的异常宏。我的旧宏看起来像这样:#define__EXCEPTION(aMessage)\{\std::ostringstreamstream;\stream我的新内联函数是这样的:inlinevoid__EXCEPTION(conststd::stringaMessage){std::ostringstreamstream;stream可能有些人已经预料到,现在__FILE__和__LINE__宏没用了,因为

c++ - 确定所有由 g++ 内联的函数调用

这个问题在这里已经有了答案:Howwilliknowwhetherinlinefunctionisactuallyreplacedattheplacewhereitiscalledornot?(10个答案)关闭8年前。我正在尝试诊断一个奇怪的性能问题,我认为它与GCC未能在C++中内联某些函数调用有关,但我不确定是哪个函数调用。GCC是否有一个标志来列出执行内联的所有行号?

c++ - 当对象具有值语义时,在方法中内联虚函数

考虑以下带有模板方法设计模式的代码:classA{public:voidtemplateMethod(){doSomething();}private:virtualvoiddoSomething(){std::cout我想知道编译器是否能够在情况1和情况2中内联/取消虚拟化“doSomething()”成员函数。如果它为templateMethod()创建3段不同的二进制代码,这是可能的:一段没有内联,2段内联了A::doSomething()或B::doSomething()(在情况3中必须分别调用,1和2)你知道这个优化是否是标准所要求的,或者是否有任何编译器实现了它?我知道我可

c++ - 在 Visual Studio 中使用 C++17 静态内联成员时的奇怪行为

昨天我问了一个关于这个问题的问题,但是没能给出一个MVCE。我设法用一个简单的程序重现了这一点。问题在于使用std::list作为类中的静态内联声明。MicrosoftVisualStudio不支持这个新的C++17功能。截至3月,它有一些错误,但据我所知,它们已被修复。以下是如何解决此问题的说明,这发生在Debug模式下。在main.cpp#include#include"header1.h"intmain(){return0;}在header1.h中:#includestructBoo{staticinlinestd::listmylist;};在另一个CPP.cpp#includ

c++ - 继承和内联?

我最近一直在阅读大量书籍,在涉及继承(和虚函数)的同时,我不断地遇到“内联”关键字。现在我知道内联在正常意义上是什么了——编译器可能会用确切的代码替换函数调用。然而,我看到它提到的关于继承的次数——在继承中使用内联是否有一些特殊的原因?我不明白为什么一直提到它....内联函数在继承/派生类/虚函数中有什么额外的作用? 最佳答案 是的,在虚函数上使用内联是浪费时间。必须通过由函数指针组成的虚函数表来调用虚函数。指针不能调用内联函数。它必须作为一个真正的函数存在。有一些异常(exception)。如果调用者知道确切的对象类型,它可以完全

c++ - c/c++ 优化调用函数中的常量变量

C/C++编译器仅在使用-Os、-O1和-O2时使用常量参数(在编译时已知)优化单层函数。他们不会优化所有层。只有-O3可以做到这一点。gcc是不支持“优化”属性的WinAVR4.3.3。voidinner(doublevalue){//operationsusingvalue//...}voidouter(doublevalue){//fewoperationsusingvalue//...inner(value);}intmain(){inner(1);//optimizeouter(1);//onlyoptimizebyusing-O3}除了以下几种可能的解决方案还有哪些?-O3

c++ - 如何将数组从 perl 传递到内联 C++?

我不知道这是一个错误还是什么。以下代码适用于Inline::C但不是Inline::CPP#!/usr/bin/perlusewarnings;useInlineC;my@array=(1..10);printfindAvLen(\@array),"\n";__END____C__intfindAvLen(AV*arrayIn){returnav_len(arrayIn);}以上运行正常,但替换C与CPP,我收到错误Can'tlocateauto/main/findAvLen.alin@INC...我可以让其他内联C++代码工作。例如,可以将变量列表传递给带有省略号的内联代码,就像它们

c++ - 非限定名称查找找到内联命名空间成员

我写了下面的代码:#includeinlinenamespaceM{intj=42;}intmain(){std::cout而且效果很好。但我预计该程序格式错误。这是因为标准说(N3797,第7.3.1/7节):Finally,lookingupanameintheenclosingnamespaceviaexplicitqualification(3.4.3.2)willincludemembersoftheinlinenamespacebroughtinbytheusing-directiveeveniftherearedeclarationsofthatnameintheencl

c++ - 指针上的指针 - 性能损失的原因

我回答了thisquestion,并注意到我认为编译器的一种奇怪行为。我首先编写了这个程序(作为我在那里回答的一部分):classVector{private:double**ptr;public:Vector(double**_ptr):ptr(_ptr){}inlinedouble&operator[](constintiIndex)const{return*ptr[iIndex];}};extern"C"inttest(constdoublea);intmain(){doublea[2]={1.0,2.0};Vectorva((double**)&a);doublea1=va[0

c++ - 内联类函数和共享库 (dll) 构建

我正在尝试将一些代码移动到共享库中(在独立编译时工作正常)但遇到了类内联函数的一些问题。mingw/gccv4.7.2.部分问题似乎是因为我更喜欢在类声明之外定义我的内联函数(它使类声明更整洁且更易于阅读)。我一直认为这是可以接受的,相当于在类声明中定义……但情况似乎并非总是如此。我创建了一个简单示例来演示这些问题。(显然,dllexport通常在宏中以在导入/导出之间切换。)标题://Uncommentoneatatimetoseehowitcompileswith:-O2-Winline//#defineINLINE_OPTION1//implicit-buildswithouti