草庐IT

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

c++ - 如何强制 g++ 内联函数?

我最近在将HaskellFFI用于C/C++时遇到了C++内联函数的问题。即,g++并不真正内联声明为inline的函数,并为它们生成符号。最终,当ghci尝试加载调用内联函数的目标文件时,这会产生链接器错误:Loadingobject(static)solveeq.o...doneLoadingobject(dynamic)/usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.so...donefinallink...ghc:solveeq.o:unknownsymbol`_ZN5Eigen8internal19throw_std_bad_alloc

c++ - 为什么我不能在另一个文件中定义内联成员函数?

我有三个文件:1.Joy.hclassJoy{public:voidtest();};2.欢乐.cpp#include"Joy.h"inlinevoidJoy::test(){}3.main.cpp#include"Joy.h"intmain(){Joyr;r.test();return0;}我尝试使用以下方法编译它们:g++cppJoy.cppg++说:main.cpp:(.text+0x10):undefinedreferenceto`Joy::test()'谁能告诉我为什么...如果我不想在.h文件中定义那个test()函数并且仍然希望它是一个inline函数?

c++ - 找出哪些函数被内联

当使用GCC4.4或MSVC编译C++时,是否可以让编译器在函数被内联时发出消息? 最佳答案 使用g++,我不认为你可以让g++报告那个,但你可以使用任何显示符号的工具检查生成的二进制文件,例如nm:#includestructT{voidprint()const;};voidT::print()const{std::cout对比#includestructT{voidprint()const{std::cout(第二种情况下nm没有输出)编辑:此外,分析器可能会有用。gprof在这两个示例中显示:0.000.000.0010.00

c++ - 如何从 Perl 调用 C++ 静态库?

我正在编写一个需要在多个应用程序之间共享的C++静态库,其中一个是用Perl编写的。不幸的是,我对核心Perl语言知之甚少(我读过Llama的书),而且我对它的库也不是很熟悉。如何从Perl脚本调用外部C++二进制文件?通过Google搜索,我找到了关于Perl的资料Inline模块,但如果我理解正确,那不是我需要的。我很确定这是为了直接在您的Perl脚本中编写C和C++代码,而不是为了调用外部C++库。C++静态库正在为ARM处理器交叉编译,因此在运行Perl脚本的目标机器上不会有C++编译器。(如果这有所作为。) 最佳答案 您可

AtCoder Beginner Contest 299

A-TreasureChest(abc299a)题目大意给定一个包含|*.的字符串,其中|两个,*一个,问*是否在两个|之间。解题思路找到两个|的下标\(l,r\)以及*的下标\(mid\),看看是否满足\(l即可。神奇的代码#includeusingnamespacestd;usingLL=longlong;intmain(void){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);intn;strings;cin>>n>>s;intl=s.find('|'),r=s.find('|',l+1),m=s.find('*');if(m>l&