草庐IT

弱引用

全部标签

c++ - 重用 "&&" token 作为右值引用背后的基本原理?

我最近举行了一次关于C++11的演讲,主要关注右值和移动语义。在演示过程中提出了一个问题,即为什么标准委员会决定重用“&&”-token而不是引入像“§”这样的新标记。有没有人发现重用&&的基本原理? 最佳答案 委员会想要一个在美式键盘上的token。我们还需要一些不会破坏现有代码的东西。&&似乎是一个显而易见的标记。我们也在寻找对标准的最小更改,重用token而不是发明新token的想法很有吸引力。我相信JohnSpicer(EDG)在2002年4月的库拉索session上首先建议将&&作为token。

c++ - vector 修改后引用 vector.back() 的奇怪行为

让我们从这个C++示例代码开始:#include#includeintmain(){std::vectorvec;vec.push_back(0);for(inti=1;i代码是用g++test.cc-std=c++11-O0编译的,下面是结果:Before:0,After:0Before:1,After:0Before:2,After:2Before:3,After:3我期待第二行输出是Before:1,After:1因为x是vector中一个项目的引用,不应通过将项目附加到vector来修改它。但是我目前还没有阅读反汇编代码或进行任何其他调查。我也不知道这是否是语言标准中未定义的行

c++ - (右值引用)VS(const 左值引用)作为 C++11 中的函数参数

谁能解释一下当右值引用作为函数参数时优先于const左值引用的情况?背景:我试图将一个const指针传递给一个函数。由于我必须考虑传入局部指针和传入临时指针的情况(比如从函数调用返回),我有两种选择:参数可以声明为:voidfoo(Tconst*const&);//constlvaluereftoconstptr或voidfoo(Tconst*&&);//rvaluereftoconstptr但是这个右值引用不能绑定(bind)到局部变量(它是左值类型。但我确实记得ScottMeyers创造了术语“通用引用”来指代右值引用。这让我更加困惑。)所以我的问题是,由于第一个声明可以处理这两种

c++ - 通过通用引用传递的函数的 std::forward?

考虑以下两个:templatevoidapply(Function&&function){std::forward(function)();}和templatevoidapply(Function&&function){function();}在什么情况下有区别,具体有什么区别? 最佳答案 如果Function的operator()具有ref限定符,则存在差异。使用std::forward,传播参数的值类别,没有它,值类别将丢失,函数将始终作为左值调用。LiveExample.#includestructFun{voidoperat

c++ - 返回子类的 const 引用

我所知道的我知道返回临时对象的const引用是可以的!(像这个例子:)classA{public:virtualconstA&clone(){return(A());}virtualstd::stringname()const{return("A");}};Returningtemporaryobjectandbindingtoconstreference但是!如果我想这样做,它仍然是正确的:classB:publicA{public:virtualconstA&clone(){return(B());}virtualstd::stringname()const{return("B")

c++ - 通过取消引用复制 std::unique_ptr 的值

我写了下面的代码,我试图将unique_ptr对象的值复制到一个结构中。#include#includeusingnamespacestd;structS{S(intX=0,intY=0):x(X),y(Y){}//S(constS&){}//S&operator=(constS&){return*this;}intx;inty;std::unique_ptrptr;};intmain(){Ss;s.ptr=std::unique_ptr(newS(1,4));Sp=*s.ptr;//Copythepointer'svaluereturn0;}它在VisualC++2012中弹出错误:

c++ - 通过引用/值重载传递

试图找出为什么在以下代码中没有引起重载歧义:floatfoo2(float&i){cout调用参数不是引用传递的foo2。为什么?如何调用传递引用参数的foo2? 最佳答案 Thefoo2whoseparametersnotpassedbyreferenceiscalled.Why?因为您不能通过引用将常量或任何计算表达式传递给采用非常量引用的函数。要通过引用传递表达式,您需要一个可赋值的值——可以出现在赋值表达式左侧的值。由于2不能出现在赋值表达式的左侧,因此它不能用于调用需要引用的函数。当引用为const时,您可以传递任何内容,

c++ - 返回 vector 比通过引用传递慢吗?

在过去,我们被训练使用通过引用传递的结果参数,以避免不必要地复制数据。然而,对于更智能的编译器——尤其是C++11的扩展,是否仍然需要?具体来说,现代C++11/C++14编译器在2018年是否有任何理由(仍然)使用voidFilter(vector&elements,vector&outElements);而不是简单地返回vector,即vectorFilter(vector&elements);提前感谢所有见解! 最佳答案 andparticulartheextensionstoC++11isthisstillrequired?

c++ - 'giving out' 是构造函数中对 'this' 的引用吗?

我的代码:Scene::Scene(conststd::string&scene_file):ambient_light(0,0,0),background(0,0,0){scene_parserparser(*this);parser.parse(scene_file);}scene_parser是Scene的friend,在parse方法中它访问(r/w)Scene的成员。这会导致任何问题吗? 最佳答案 是的,给出对this的引用是可以的。但是,您通常希望在其他对象稍后使用该指针时执行此操作。您的用例看起来会在构造函数完成之前立

c++ - 了解引用与指针。为什么这行得通?

通过seriesofSOquestions变得显而易见今天,我对指针、引用和值的真正本质知之甚少。考虑以下代码:int*p=newint(3);int&r=*p;cout这个的输出是p=0x1001000b0*p=3&r=0x1001000b0r=3&r=0x1001000b0r=3&r=0x1001000b0r=4我不明白的是为什么我第二次打印引用的值时没有出错。与引用值对应的指针已被删除。来self的previousquestion,我几乎说服自己,任何像r=x这样的语句都会复制x来代替r所指的值.但是,如果是这种情况,那么p和&r将是不同的地址,对吧?如果我已经在0x100100