jjzjj

overload-resolution

全部标签

c++ - 函数模板重载解决方案和编译器优化

我正在看这里发现的这个问题TemplatefunctionoverloadfortypecontainingatypeOPuser2079802为他/她的问题提供此代码:I'mtryingtodothefollowing:#include#include#includetemplatevoidf(Tt){std::coutvoidf(T>t){std::cout{});//shouldusefirsttemplatef(std::vector>{});//shouldusesecondtemplate}WhatisthesimplestwaytodothisinC++14?Ithoug

c++ - 用户自定义转换的第二个标准转换顺序

我对标准转换序列术语有误解。我遇到了以下引用N3797§8.5.3/5[dcl.init.ref]:—Iftheinitializerexpression—isanxvalue(butnotabit-field),classprvalue,arrayprvalueorfunctionlvalueand“cv1T1”isreference-compatiblewith“cv2T2”,or—hasaclasstype(i.e.,T2isaclasstype),whereT1isnotreference-relatedtoT2,andcanbeconvertedtoanxvalue,clas

c++ - 当参数是函数参数包时,在部分排序期间推导模板参数

N452714.8.2.4[temp.deduct.partial]3Thetypesusedtodeterminetheorderingdependonthecontextinwhichthepartialorderingisdone:(3.1)—Inthecontextofafunctioncall,thetypesusedarethosefunctionparametertypesforwhichthefunctioncallhasarguments.(3.2)—Inthecontextofacalltoaconversionfunction,thereturntypesofth

c++ - const T*& 和 const T* 不会在函数重载时产生歧义

为什么下面的示例代码不会产生歧义有没有办法调用第二个版本?(如果这不是错误)#includeusingnamespacestd;voidfoo(constint*){cout编辑:这个#includeusingnamespacestd;voidfoo(constint){cout确实会产生歧义。顺便说一下,去掉const产生的歧义。编译器:带有标志--std=c++14的g++5.3.0 最佳答案 Whythefollowingsamplecodedonotproduceambiguity这不是错误。参数的类型是constint*&

c++ - 为什么 float 和 int 的 std::pow 会调用此重载?

以下内容:#includeintmain(){floatbase=2.0f;floatresult=std::pow(base,2);return0;}在打开时触发-Wconversion警告。Wandbox似乎调用了std::pow的double重载,我希望选择float重载(与int指数被转换为float)。知道他重载的人能解释一下为什么吗? 最佳答案 自C++11起,混合参数pow将任何整数参数强制转换为double。混合参数函数的返回类型始终是double除非一个参数是longdouble然后结果是longdouble。[c

c++ - 用双花括号初始化 vector :std::string vs int

在这个问题的回答中:Initializingvectorwithdoublecurlybraces表明vectorv={{"a","b"}};将调用带有initializer_list的std::vector构造函数和一个元素。因此vector中的第一个(也是唯一一个)元素将从{"a","b"}构造。这会导致未定义的行为,但这超出了这里的重点。我发现的是std::vectorv={{2,3}};将使用两个元素的initializer_list调用std::vector构造函数。造成这种行为差异的原因是什么? 最佳答案 类类型列表初始

c++ - 模板 :Name resolution:Point of instantiation: -->can any one tell some more examples for this statement?

这是来自ISOC++标准14.6.4.1实例化点的声明Forafunctiontemplatespecialization,amemberfunctiontemplatespecialization,oraspecializationforamemberfunctionorstaticdatamemberofaclasstemplate,ifthespecializationisimplicitlyinstantiatedbecauseitisreferencedfromwithinanothertemplatespecializationandthecontextfromwhichi

c++ - 禁止自动类型推断

我有以下演示代码:templateTfunc(constU&t){returni*t;}templateTfunc(constT&t){return2*i*t;}intmain(){returnfunc(1);}这是我真实代码的精简版,所以它看起来没什么用,但应该足以说明问题了:Infunction‘intmain()’:11:23:error:callofoverloaded‘func(int)’isambiguous11:23:note:candidatesare:2:3:note:Tfunc(constU&)[withinti=1,T=int,U=int]5:3:note:Tfu

c++ - SFINAE:当重载移动到其他 namespace 时,检查函数是否存在中断

我想使用SFINAE检查特定命名空间中是否存在函数。我找到了SFINAEtotestafreefunctionfromanothernamespace哪个完成了工作,但有些事情我不明白。目前我有这个工作代码,直接来自链接的问题://switchto0totesttheothercase#defineENABLE_FOO_BAR1namespacefoo{#ifENABLE_FOO_BARintbar();#endif}namespacedetail_overload{templatevoidbar(Args&&...);}namespacedetail{usingnamespacede

c++ - 将函数指针传递给函数时处理 <unresolved overloaded function type>

让我们考虑一下:voidgoo(){std::cout现在我想使用如下定义的一些包装函数来调用其中一个函数:templatevoidc(F&&f,A&&...a){f(std::forward(a)...);}使用方法:c(&goo,10);//(X)c(&goo);//(Y)两种情况都失败(GCC5.3.1)并出现相应的错误:error:nomatchingfunctionforcallto‘c(,int)’error:nomatchingfunctionforcallto‘c()’就我而言,失败是因为编译器在必须初始化f对象时无法选择适当的重载(信息太少)。作为一种解决方案,我当然