草庐IT

弱引用

全部标签

c++ - 在模板中引用模板化函数

我希望能够为模板中的模板化函数命名。由于可以使用“模板模板”语法命名模板类,并且可以使用“函数指针”语法命名函数,所以我想知道是否有命名函数的语法(或提案)在模板中而不指定模板。templatestructA{t_typevalue;};templateclasst_type>structB{t_typevalue;};templateconstexprintC(intvalue){returnvalue+added;}templateconstexprintD(intvalue){returnfunction(value);}//GOAL:Templateargumentreferr

c++ - 引用类型静态数据成员的问题,可能是编译器错误

我想一个类的静态数据成员可以是一个初始化为全局变量的引用类型,如下所示:#include#includeconstunsignedintglobal=0x1fee;structK{inta;staticconstint&iref;};constint&K::iref=global;intmain(){printf("%d\n",K::iref);return0;}但在我的VC++中test,它可以编译但在执行时会产生异常。这只是VC++的一个错误吗?我做错了什么吗? 最佳答案 你只需要机会constint&k::iref到k::ir

c++ - 引用是否有存储位置?

引用是否有存储位置,或者它只是另一个位置的别名?这是否因C++版本而异,还是与所有C++版本一致?如果一个引用有一个存储位置,那么它是否只允许像类型这样的指针上的值语义?当您这样使用引用时,它是如何工作的:structaStruct{intaVariable;aClass&aReferencetoaClass;};是占空间还是别名? 最佳答案 latestC++20spec(§9.2.3.3)并且至少自C++2005draftspec以来状态:Itisunspecifiedwhetherornotareferencerequires

c++ - 关于将 const 引用绑定(bind)到临时对象的子对象

代码如下#includestructP2d{doublex,y;P2d(doublex,doubley):x(x),y(y){}~P2d(){printf("Destructorcalled\n");}};P2dcenter(){returnP2d(10,10);}intmain(intargc,constchar*argv[]){constdouble&x=center().x;printf("x=%.18g\n",x);return0;}g++(版本5.2.0)将在中输入printf之前销毁P2d临时实例main,但该值无论如何都会被保留(即,不是将x绑定(bind)到临时P2d实

c++ - 在 C++ 中创建对三元运算符结果的 const 引用是否安全?

这段代码中发生了一些不明显的事情:floata=1.;constfloat&x=true?a:2.;//Note:`2.`isadoublea=4.;std::coutclang和gcc输出:4,1人们会天真地期望相同的值被打印两次,但事实并非如此。这里的问题与引用无关。有一些有趣的规则规定了的类型?:。如果两个参数的类型不同并且可以转换,则它们将使用临时对象。引用将指向的临时值?:。上面的示例编译正常,并且在使用-Wall编译时可能会或可能不会发出警告,具体取决于您的编译器版本。下面是一个例子,说明在看起来合法的代码中出错是多么容易:templateconstT&min(constI

c++ - 将函数标识符作为右值引用传递并对其应用 std::move()

考虑以下片段#include#includeusingcallback=std::function;doublesum(doublea,doubleb){returna+b;}intmain(intargc,char*argv[]){//Shouldn'tthisleavesum()inaninvalidstate?autoc=std::move(sum);std::cout我正在将sum转换为右值引用,将其存储在c中,并在没有明显错误行为的情况下调用这两个函数。这是为什么?std::move不应该让sum处于无效状态吗? 最佳答案

c++ - VC9 C++ 语言扩展引用

是否有关于VC9(SP1)编译器具有的所有C++扩展的引用?示例是__declspec东西、可变参数宏和编译器内在函数,尽管还有一些不太引人注目的东西,比如能够在类范围内拥有模板函数特化,而显然标准说它们不能(PreviousQuestion).这包括支持的C99、TR1、C++0X等的任何部分。有关VC10的信息也很有用,我知道它包含C++0X的某些部分,但还有什么?我在MSDN上找到了零零碎碎的东西,但没有真正的列表,除非我知道扩展的名称,或者至少知道足够的相关信息(即它的作用),否则它是不可能的。 最佳答案 VisualStu

c++ - 小于函数解引用指针

在某些情况下,STL容器中有指针,小于比较不应由指针进行,而应由指向的对象进行。一个简单的例子是一个vector,它应该按实数排序。目前我解决这个问题:templatestructltDeref{booloperator()(T_PTRp0,T_PTRp1)const{return*p0并将其用作vectorvIn;sort(vIn.begin(),vIn.end(),ltDeref());或set>someSet;与其编写我自己的比较函数,不如在C++中有更“标准”的方法,它不需要用户制作的模板? 最佳答案 通常你可以使用thef

c++ - 如何使用导致编译时错误或运行时错误的引用?

我无法找到我friend在面试中被问到的问题的解决方案......下面是问题:Defineaclasssuchthatdeclaring/usingareferencetoitsobjectwillgivea.compiletimeerrorb.runtimeerrorGenerally,areferencewouldbeoftype&X=Y;我们如何实现上述目标以及定义引用时内部会发生什么?有人可以解释一下吗。 最佳答案 没有一个类的实例不能绑定(bind)到它们的引用。至于“使用”,回答起来太模糊了。

c++ - 进一步的右值引用和临时对象

在阐述我之前的question和question,我想了解在这个真实场景中发生了什么。我有以下模板函数:templatevoidFastHash::Insert(constKey&key,constValue&value){Insert(std::make_pair(key,value));}例如,使用左值和右值的混合调用,就像在这个调用中:std::stringname="TheGreat";hashTable.Insert(name,"Gatsby");(用于测试目的)。Insert以上调用templatevoidFastHash::Insert(pair&&keyValuePai