草庐IT

c++ - 类中定义的静态成员函数是否隐式内联?

据我所知,在类中定义的每个非静态成员函数都是隐式内联的。现在我想知道这是否对静态成员函数有效,考虑到我可以在不同的翻译单元中多次定义该函数。举个例子:classFoo{public:staticvoidstatic_f(void){std::coutPS:在本文档(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3690.pdf)中,我发现了这一行:9.4.1Staticmemberfunctions[class.static.mfct]1[Note:Therulesdescribedin9.3applytostatic

c++ - 具有私有(private)数据成员的内联类函数

现在我一直在学习内联函数,遇到了一些让我很困惑的事情看这门课classNebla{private:intx;public:inlinevoidset(inty){x=y;}inlinevoidprint(){cout它有一个私有(private)数据成员:intx;它有两个公共(public)内联函数:set(inty)和print()现在因为它们两个函数是内联的,所以当它们被调用时,编译器会用函数的内容替换函数调用。如果我这样做Neblan;n.set(1);n.print();因为这两个函数是内联的,所以应该等同于:Neblan;n.x=1;cout但是等一下,x是私有(priva

c++ - C++ 中宏相对于内联的优势

我们知道内联是有利的,因为它们会被编译器检查,并且与宏相比,相同的操作(如++x)作为参数传递时不会计算多次。但在一次采访中,我被问及宏更适合在C++中内联的具体优势或情况。有没有人知道答案或可以对这个问题给出一个想法? 最佳答案 我唯一能想到的是,有些技巧可以用宏来实现,而不能用内联函数来实现。在编译时将标记粘贴在一起,以及那种骇客行为。 关于c++-C++中宏相对于内联的优势,我们在StackOverflow上找到一个类似的问题: https://stac

c++ - 内联还有用吗?

这个问题在这里已经有了答案:WhenshouldIwritethekeyword'inline'forafunction/method?(16个回答)3年前关闭。我相信,inline已过时,因为我读过here:Nomatterhowyoudesignateafunctionasinline,itisarequestthatthecompilerisallowedtoignore:thecompilermightinline-expandsome,all,ornoneoftheplaceswhereyoucallafunctiondesignatedasinline.然而,Angew似乎

c++ - 如何对类定义中定义的模板成员函数使用显式模板实例化?

为了减少大量使用模板的大型项目的编译时间,我使用“外部模板”(explicittemplateinstantiation)来防止在许多不同的编译单元中定义通用模板函数,取得了很好的效果.但是,一件令人讨厌的事情是它不适用于类定义中定义的成员函数。例如,我有以下模板类:templatestructFoo{staticTdoubleIt(Tinput){returninput*2;}};现在,我知道Foo最常用于数字类型,所以我将其添加到标题中:externtemplatestructFoo;externtemplatestructFoo;externtemplatestructFoo;然

c++ - 不断结合优化编译器

我有一个包含很多小内联函数的头文件。他们中的大多数恰好有常量数据。由于这些函数对性能至关重要,因此它们处理常量的方式变得很重要。据我所知,有两种方法可以引用常量:1)在稍后与应用程序链接的单独源文件中定义它们。2)就地定义常量。我会选择后一种方式,因为它更易于维护。但是,如果编译器不优化通过内联创建的数千个相等常量,它可能会变慢。问题:编译器会合并这些相等的常量吗?具体而言,将使用以下哪些方法?1)跨编译单元组合相等常量。2)跨链接模块(整个程序或库)组合相等常量3)将常量与碰巧具有相同位模式并满足编译单元或整个程序对齐要求的任何静态常量数据组合。我使用现代编译器(GCC4.5)。我不

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++ - 虚函数可以内联吗

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