草庐IT

弱引用

全部标签

c++ - 是否可以将指针重新解释为维度数组引用?

假设我有一些指针,我想将其重新解释为静态维度数组引用:double*p;double(&r)[4]=?(p);//someconstruct?//clarifytemplatevoidfunction(double(&a)[N]);...double*p;function(p);//thiswillnotwork.//Iwouldliketocastpastomakeitappearasdouble[N]有可能吗?我该怎么做? 最佳答案 它很丑:doublearr[4];double*d=arr;double(&a)[4]=*sta

c++ - 右值引用是否允许隐式转换?

下面的代码合法吗?std::string&&x="helloworld";g++4.5.0编译此代码没有任何问题。 最佳答案 目前在usenet上对此进行了讨论。参见Rvaluereferenceexamplein8.5/3correctorwrong?.这是不合法的。 关于c++-右值引用是否允许隐式转换?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3124094/

c++ - 如何通过引用为 C++0x 传递 Lambda 表达式参数

我正在使用C++0xlambda表达式来修改映射的值。但是,很难通过引用传递map迭代器。如果我只是通过迭代器传递值,例如:[](std::pairiter)它编译正常,但map中的值没有更新。如果我尝试通过引用传递迭代器,例如[](std::pair&iter)VS2010编译器提示它cannotconvertparamaterfrom'std::pair'to'std::pair&'这是代码。了解有关如何使用lambda表达式修改std::map对象的信息。#include#include#include#includeint_tmain(intargc,_TCHAR*argv[]

c++ - QMap/QHash operator[] 返回引用有效性

我想知道对Qt容器内的值的引用,尤其是QHash或QMap的有效期有多长。我所说的有效是指在插入或删除其他元素后是否保证仍指向映射/哈希内的正确位置。让我们看下面的代码:QHashdict;//orQMapdict;dict.insert('a',1);int&val(dict['a']);dict.insert('b',2);val=3;//在最后一行设置值是否会正确地将与a关联的值更新为3或者它会导致段错误还是未定义(所以有时工作,其他时候出现段错误,这取决于是否必须在内部重组数据结构,例如调整哈希表数组的大小)。QMap和QHash的行为是否相同,或者一个有效而另一个无效?

c++ - 如何从类模板自身的类定义中引用类模板作为模板?

场景如下:templateclassT,typenameV>structparent{voiddo_something();};templatestructchild:publicparent{voiddo_something(Vargument);usingparent::do_something;//C3200:invalidtemplateargumentfortemplateparameter'IMPL',expectedaclasstemplate};以上代码无法在给定行上编译并出现给定错误(MSVC9.0)。但是,如果我改写这个,在child的类定义之外:templates

c++ - g++ 中未定义的 Python 引用

我正在使用以下命令:g++-L/usr/lib/panda3d-L/usr/lib-o"panda3dplayground"./main.o-lpython2.7-lp3pystub-lp3framework-lpandafx-lp3pystub-lpandaexpress-lpanda-lp3framework-lp3direct我收到以下错误:/usr/lib/panda3d/libpanda.so:undefinedreferenceto`PyObject_Cmp'/usr/lib/panda3d/libpanda.so:undefinedreferenceto`PyUnicod

c++ - 在 C++ 11 中将非常量左值引用绑定(bind)到右值是否有效?(已修改)

我知道在c++03中,非常量引用不能绑定(bind)到右值。T&t=getT();无效,在c++11中,我们可以这样做:T&&t=getT();但是上面的代码,应该在c++11中工作吗?我用vs11测试了下面的代码:FoogetFoo(){returnFoo();}voidfz(Foo&f){}intgetInt(){returnint();}voidiz(int&i){}intmain(){{Foo&z=getFoo();//okfz(getFoo());//okint&z2=getInt();//error:initialvalueofreferencetonon-constmus

c++ - 将按引用传递和按值传递混合到可变参数模板函数是否有效?

我有一个方法,它为一个对象分配内存,然后调用它的构造函数——一个内存分配器。templateinlineT*AllocateObject(Arguments...args){returnnew(InternalAllocate(sizeof(T)))T(args...);}使用此函数混合按值传递和按引用传递是否有效?例如,使用具有一些按值和一些按引用的构造函数分配一个类。它可以编译,但我不确定它是否有任何讨厌的副作用。 最佳答案 您正在寻找的是完美转发,即。就复制副作用而言,您的AllocateObject函数应该是完全透明的。这涉

c++ - Lambda 通过引用捕获引用变量

对于lambda,我想通过引用捕获一些已经通过引用保存在外部范围中的内容。假设引用的值比lambda长,但不是创建lambda的范围。Iknowthat如果lambda按值捕获引用变量,则将复制引用的对象。我想避免这种复制。但是如果我通过引用捕获一个引用变量会发生什么?如果原始引用变量在执行lambda之前超出范围怎么办?这样安全吗?换句话说:是引用后面的对象还是lambda中引用的引用变量?autof(){constauto&myRef=g();return[&]{myRef.doSomething();};}f()();//Safe? 最佳答案

C++14 Lambda - 通过引用或值有条件地捕获

是否可以根据编译时信息有条件地选择lambda的捕获方法?例如……automonad=[](auto&&captive){return[(?)captive=std::forward(captive)](auto&&a){return1;};};如果decltype(captive)是一个std::reference_wrapper,我想通过引用捕获,而其他一切都通过值捕获。 最佳答案 Lambda捕获类型不能由依赖于模板的名称控制。但是,您可以通过将创建内部lambda委托(delegate)给重载函数来达到预期的效果:templ