草庐IT

c++ - 重载 ‘QString(int)’ 不明确

下面的代码片段给出了编译错误重载“QString(int)”的调用不明确与qt4.7.3(系统是linux64bit,debian不稳定)structQSAConnection{QSAConnection():sender(0),signal(0),function_ref(){}QSAConnection(QObject*send,constchar*sig,QSObjectref):sender(send),signal(QLatin1String(sig)),function_ref(ref){}QObject*sender;QStringsignal;QSObjectfunct

c++ - 在类中初始化固定大小的常量数组

考虑以下类:classA{constintarr[2];public:A(){}};是否可以从构造函数初始化列表或以任何其他方式而不是在声明它的行上初始化arr(即constintarr[2]={1,2};)?请注意,我对适用于C++98的方法很感兴趣! 最佳答案 通过将它们包装在struct中,例如:classA{structData{intarr[2];};Dataconstarr;public:A():arr(someOtherStruct){}};这确实意味着要访问数据,您必须编写arr.arr。可以通过继承struct来避

c++ - 使用 int 和 string boost::interprocess 映射

我有以下代码使用boost进程间将映射保存到共享内存中usingnamespaceboost::interprocess;//Sharedmemoryfront-endthatisabletoconstructobjects//associatedwithac-string.Eraseprevioussharedmemorywiththename//tobeusedandcreatethememorysegmentatthespecifiedaddressandinitializeresourcesshared_memory_object::remove("MySharedMemory

c++ - 为什么这个模板函数可以成功编译?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Destructorsofbuiltintypes(int,charetc..)模板函数:templatevoidkill(T*type){type->~T();}调用:intx=5;kill(&x);哇哦,编译成功了!?像int这样的原始类型怎么会有析构函数?它还与char、bool等一起工作。

c++ - 将可变数量的数组引用传递给具有可变参数模板的函数

我知道如何编写接受可变数量参数的可变参数模板函数:templatevoidf(){//whatever}而且我知道如何编写接受数组引用的模板函数:templatevoidf(T(&arr)[Length]){//whatever}但我想不出如何将两者结合起来,以便函数接受可变数量的数组引用。我的第一次尝试是templateunsignedintarrlen(T(&)[Length]){returnLength;}templateintf(T(&arr)[Length]){returnLength;}templateintf(T(&arr)[Length],Rest...rest){re

c++ - 转换为复合赋值运算符?

我的代码,归结为本质,归结为:intx=5;x*=0.5;用VisualStudio编译它,我收到一条关于可能丢失数据的警告C4244-当然,因为(简化)一个int与一个double的乘法结果是一个double,然后将其转换为一个int,丢失非-整数部分。我的问题是,是否有C++语法来指示这是预期的行为,以便使警告静音(我知道pragmapush/pop来禁用警告,我认为更清楚地表明这是实际的预期行为,而且我不仅仅是在抑制警告)。长形式将在乘法之后显式转换,如下所示:x=(int)(x*0.5);但是复合运算符更易于阅读。那么,有没有办法这样投?我试过将“(int)”放在我能想到的每个

C++11 Lambda 和模板导致奇怪的链接器行为

在我的代码中,我得到了包含依赖于某些模板参数的lambda表达式的函数模板。最近我遇到了链接器错误,可能是因为我的g++编译器更新了,但不幸的是,我不知Prop体情况。我将举一个小例子来说明这个问题。因为这是一个链接器问题,我们必须创建几个文件来演示它。我们有common.hpp,里面包含一个通用模板函数,两个模块a.cpp/a.hpp和b.cpp/b.hpp使用该函数和一个包含main函数的main.cpp模块。//common.hpp#includetemplatevoidmy_transform(Iteratorbegin,Iteratorend){std::transform(

c++ - `mpl::plus< mpl::int_<1>, mpl::int_<2>>::type` 与 `mpl::int_<3>` 不是同一类型?

下面的代码再现了一个我真的不理解boostMPL库的行为:#include#include#includeusingnamespaceboost;intmain(){typedefmpl::int_one;typedefmpl::int_two;typedefmpl::int_three;//Thefollowinglinebreakscompilation...//static_assert(is_same::type,three>::type::value,"Notthesametype");//...whilethisworksstatic_assert(mpl::plus::t

c++ - 在构造具有 const 成员的对象时调用另一个构造函数

我有一个包含const成员的类,一个构造函数调用另一个填充了额外值的构造函数。通常我可以为此使用冒号初始化器,但函数很复杂(printf/sprintf-like)并要求我在堆栈上使用一个变量,所以我必须在构造函数的主体中执行此操作并使用assign*this到新对象。但是当然这是无效的,因为我的成员变量是const。classA{public:A(intb):b(b),c(0),d(0)//requiredbecauseconst{intnewC=0;intnewD=0;myfunc(b,&newC,&newD);*this=A(b,newC,newD);//invalidbecau

c++ - 如何在 C++ 中将值数组转换为参数

假设我有两个函数:voida(intarg1){...}voidb(intarg1,arg2){...}我还有一个字符串,其中包含我要调用的函数的名称,以及一个包含所有参数的数组:stringfunc_name="b";//'a'or'b'intargs[]={1,2};//haseither1or2values我需要动态调用函数。使用没有参数的函数来实现它非常简单,我只是创建了一个映射(字符串函数名=>指向函数的指针)。现在我也想传递参数,所以我想将数组转换为实际参数,如下所示:autof=std::bind(b,args);//Doesn'tcompile,requires1,2a