草庐IT

int_void

全部标签

c++ - 非类型模板参数可以是 "void*"类型吗?

Yakk-AdamNevraumontsaid:Non-typetemplateparametersoftypevoid*arenotallowedinatleastsomeversionsofthestandard.这是真的吗?如果为真,在哪些版本的标准中不允许类型为void*的非类型模板参数?(注意:如acomment回答anothercomment,这是关于非类型模板参数,不是模板类型参数,可以是任何有效的type-id[temp.arg.type],包括void*。 最佳答案 长话短说void*类型的模板参数自C++20起有

c++ - 无法使用统一初始化复制 std::vector<std::function<void ()>>。这个对吗?

以下代码无法在GCC4.7.2或Clang3.2中编译:#include#includeintmain(){std::vector>a;std::vector>b{a};}问题是编译器将尝试使用initializer_list创建b,而显然它应该只是调用复制构造函数。然而,这似乎是期望的行为,因为标准规定initializer_list构造函数应该优先。此代码适用于其他std::vector,但对于std::function,编译器无法知道您是否需要initializer_list构造函数或其他构造函数。似乎没有办法绕过它,如果是这种情况,那么您永远不能在模板代码中使用统一初始化。这将

c++ - std::function 与原始函数指针和 void* this 相比的性能?

库代码:classResource{public:typedefvoid(*func_sig)(int,char,double,void*);//RegistrationregisterCallback(void*app_obj,func_sigfunc){_app_obj=app_obj;_func=func;}//Callingwhenthetimecomesvoidcall_app_code(){_func(231,'a',432.4234,app_obj);}//Otherusefulmethodsprivate:void*app_obj;func_sig_func;//Oth

c++ - 未定义模板的隐式实例化 'std::__1::array<int, 3>'

我复制并粘贴了这个确切的代码,找到了here进入我的IDE,出现错误,我不明白为什么会这样,想了解原因。std::arraya2={1,2,3};//exceptafter= 最佳答案 一定要记住#includeButifyoudon'tincludeanystandardheaders,youshouldgetasimplererroraboutstdbeingundefined. 关于c++-未定义模板的隐式实例化'std::__1::array',我们在StackOverflow上

c++ - 为什么构造函数在使用 CHAR 类型的参数调用时选择类型 INT 而不是 SHORT?

可以看出,在下面的代码中,正在调用参数类型为int的构造函数。我知道int在这里没问题。但为什么不short呢?作为'A'的ASCII值给出short可以容纳的65。根据什么条件调用数据类型为int的构造函数?#includeclassRightData{intx;public:RightData(shortdata){cout 最佳答案 integralpromotion的结果对于char是int(不是short);和促销(例如char->int)有更高的rankingoverloadresolution中的其他转换(例如char

c++ - 为什么T&&实例化为int&?

谁能解释一下为什么会编译,为什么t会以int&类型结束?#includevoidf(int&r){++r;}templatevoidg(Funfun,T&&t){fun(std::forward(t));}intmain(){inti=0;g(f,i);}我在GCC4.5.020100604和GDB7.2-60.2上看到了这个 最佳答案 因为完美转发,当P&&的参数是一个左值时,P将被推导为参数的类型加上一个&附上。所以你得到int&&&,其中P是int&。如果参数是右值,则P将仅推导为参数的类型,因此您将得到一个带有P的int&&

c++ - QObject::connect: 无法对类型为 'int&' 的参数进行排队

我试着这样做:connect(this,SIGNAL(signalClicked(int&)),classA,SLOT(doWork(int&)));但我从标题中得到了信息。所以我浏览了互联网并想出了这个也不起作用的解决方案:qRegisterMetaType("Type");connect(this,SIGNAL(signalClicked(Type)),classA,SLOT(doWork(Type)));Error:nomatchingfunctionforcallto‘qRegisterMetaType(constchar[5])’有什么解决办法吗?

c++ - 如何将 std::vector::emplace_back 用于 vector<vector<int>>?

vector>res;res.emplace_back({1,2});//changetores.push_back({1,2});wouldwork这给我错误main.cpp:61:25:error:nomatchingfunctionforcallto‘std::vector>::emplace_back()’main.cpp:61:25:note:candidateis:Infileincludedfrom/usr/include/c++/4.7/vector:70:0,from/usr/include/c++/4.7/bits/random.h:34,from/usr/incl

c++ - 使用带有 std::string 键和 int 键的 std::map 的成本?

我知道单个map查询最多需要log(N)时间。但是我想知道,我已经看到很多使用字符串作为映射键的示例。例如,将std::string作为键关联到映射而不是int的性能成本是多少?std::mapsomeMap;对比std::mapsomeMap;谢谢! 最佳答案 分析算法的渐近性能正在研究必须执行的操作以及它们添加到等式中的成本。为此,您需要首先了解执行的操作是什么,然后评估其成本。在平衡二叉树(映射恰好是)中搜索键需要O(logN)复杂的操作。这些操作中的每一个都意味着比较匹配的键,如果键不匹配则跟随适当的指针(子指针)。这意味着

c++ - int* x[n][m] 和 int (*x) [n][m] 有什么区别?

正如我所见,int*x[n][m]将x声明为指向整数的二维指针数组,因此分配内存应为就像x[i][j]=newint一样简单,正如预期的那样,它工作正常。现在,如果我将声明更改为:int(*x)[n][m]x[i][j]=newint不再有效并导致编译错误。x=(int(*)[n][m])malloc(sizeof(int[n][m]))然而编译。从我运行的几个测试来看,在内存分配之后,不同的声明/分配组合似乎不会影响存储在变量中的值。我错过了什么吗?所以我的问题是,**int*x[n][m]和int(x)[m][n]之间有区别吗?int(x)[n][m]是如何存储在内存中的?