草庐IT

forward_static_call

全部标签

c++ - g++ : In what order should static and dynamic libraries be linked?

假设我们有一个名为“my_app”的主可执行文件,它使用了其他几个库:3个库是静态链接的,另外3个是动态链接的。它们应该按什么顺序与“my_app”相关联?但是这些应该按什么顺序链接呢?假设我们得到了依赖于libSB的libSA(如在静态A中)和依赖于libSB的libSC:libSA->libSB->libSC以及三个动态库:libDA->libDB->libDC(libDA为基础,libDC为最高)这些应该按什么顺序链接?基本的第一个还是最后一个?g++...-glibSAlibSBlibSC-lDA-lDB-lDC-omy_app似乎是正确的顺序,但是是这样吗?如果任何动态库与静

c++ - 重载 "function call"运算符有什么用处?

我最近发现,在C++中你可以重载“函数调用”操作符,以一种奇怪的方式,你必须编写两对括号来这样做:classA{intn;public:voidoperator()()const;};然后这样使用:Aa;a();什么时候有用? 最佳答案 这可用于创建"functors",像函数一样工作的对象:classMultiplier{public:Multiplier(intm):multiplier(m){}intoperator()(intx){returnmultiplier*x;}private:intmultiplier;};Mul

c++ - `static constexpr auto` 使用未命名枚举初始化的数据成员

我正在开发一个C++11项目,仅使用clang++-3.4,并决定使用g++-4.8.2进行编译以防产生的错误有任何差异。原来g++拒绝了clang++接受的一些代码。我已将问题简化为下面给出的MWE。enum{a};templatestructfoo{staticconstexprautovalue=a;};intmain(){staticconstexprautor=foo::value;}foo.cpp:5:23:error:‘constfoo::value’,declaredusinganonymoustype,isusedbutneverdefined[-fpermissiv

c++ - 我什么时候在 C++ 中使用 const volatile、register volatile、static volatile?

我想知道volatile关键字与register、const和static结合的不同用途关键词。我不确定有什么影响,所以我认为:registervolatileintT=10;建议编译器将T存储在寄存器中,T的值可以从外部某处(操作系统、硬件、另一个线程)修改constvolatileintT=10;程序本身不能修改T,但是T可以在代码之外的地方修改。staticvolatileintT=10;如果T是类的数据成员,则意味着该类的所有对象都具有相同的T值,并且T可以从外部某处修改。如果T是文件中的全局变量,则其他文件(属于项目的一部分)中的源代码无法访问T,但可以从外部某处访问T。如果

c++ - 我在哪里将常量字符串放在 C++ : static class members or anonymous namespaces? 中

我需要定义一些仅由一个类使用的常量字符串。看起来我有三个选择:将字符串直接嵌入到使用它们的位置。将它们定义为类的私有(private)静态常量成员://A.hclassA{private:staticconststd::stringf1;staticconststd::stringf2;staticconststd::stringf3;};//A.cppconststd::stringf1="filename1";conststd::stringf2="filename2";conststd::stringf3="filename3";//stringsareusedinthisfil

c++ - static_cast<T>(-1) 是在没有 numeric_limits 的情况下生成全一位数据的正确方法吗?

我在一个无法访问C++标准库的环境中编写C++代码,特别是无法访问std::numeric_limits.假设我要实现templateconstexprTall_ones(/*...*/)专注于无符号整数类型,我该放什么?具体来说,是static_cast(-1)够好了?(根据我猜的大小,我可以将其他类型视为无符号字符数组。) 最佳答案 使用bitwiseNOT接线员~在0.TallOnes=~(T)0;一个static_cast(-1)假定二进制补码,这是不可移植的。如果您只关心无符号类型,hvd'sanswer是要走的路。工作示

c++ - 重载分辨率和数组 : which function should be called?

考虑以下程序:#include#includevoidf(charconst*&&){std::puts("charconst*&&");}//(1)voidf(charconst*const&){std::puts("charconst*const&");}//(2)templatevoidf(charconst(&)[N]){std::puts("charconst(&)[N]");}//(3)intmain(){constchardata[]="a";f(data);}应该调用哪个f?为什么?三个编译器的最新发布版本对这个问题的答案存在分歧:(1)在使用g++4.5.2编译程序时

c++ - initializer_list::size() 上的 static_assert

为什么是std::initializer_list::size不允许在static_assert中使用,即使它被声明为constexpr在我的libstdc++(v.4.6)中?例如下面的代码:templateclassPoint{public:Point(std::initializer_listinit){static_assert(init.size()==Length,"Wrongnumberofdimensions");}};intmain(){Pointq({1,2,3});return0;}给出以下错误:test.C:Inconstructor‘Point::Point(

c++ - 警告 : ISO C++ forbids converting a string constant to ‘char*’ for a static `constexpr char*` data member

这个问题在这里已经有了答案:constexprconstvsconstexprvariables?(3个回答)关闭3年前。为什么这段代码会返回警告warning:ISOC++forbidsconvertingastringconstantto‘char*’[-Wwrite-strings]如果Aconstexprspecifierusedinanobjectdeclarationornon-staticmemberfunction(untilC++14)impliesconst.Aconstexprspecifierusedinafunctionorstaticmembervariab

c++ - 返回值的转发。需要 std::forward 吗?

我正在编写一个包含许多其他库中的函数和方法的库。为了避免处理返回值,我正在应用std::forward像这样:templateT&&wrapper(T&&t){f(t);//tpassedaslvaluereturnstd::forward(t);}f返回void并采取T&&(或值(value)重载)。包装器始终返回包装器的参数,并且返回值应保留参数的值(value)。我真的需要使用std::forward吗?在return?RVO是否让它变得多余?它是引用(R或L)这一事实是否使它变得多余?如果return不是最后一个函数语句(在某些if中),是否需要它?wrapper()是否值得商