草庐IT

弱引用

全部标签

c++ - 常量变量与常量引用

在某些C++源代码中,我看到可以将表达式结果保存为常量。像这样:constint&x=y+1;这是什么意思?有这方面的文件吗?我找不到它..对我来说它似乎等同于:constintx=y+1;因为程序的结果保持不变。真的是等价的吗?如果是,为什么该语言允许第一种方式来编写它?看起来很困惑。如果不是有什么区别? 最佳答案 区别应该是结果是否被复制/移动。在第一种情况下:constint&x=y+1;y+1的值本质上是作为临时值保存的。然后我们初始化一个引用x到这个临时结果。在另一种情况下:constintx=y+1;我们计算y+1并用该

c++ - '非静态引用成员,不能使用默认赋值运算符'

当我尝试编译我的代码时出现此错误:非静态引用成员‘Timestep&Timestep::previousTimestep’,不能使用默认赋值运算符我创建了一个Problem,它创建了一个Timestep对此Timestep的引用应该存储在vectorsolution。此外,我想存储对前一个Timestep的引用-对于第一个Timestep来说,这将是对自身的引用......我读到,如果我在一个类中有const成员,我需要定义一个自己的运算符,我试图将其设置为相等。但是,从代码中删除了所有const元素,它仍然不起作用。有什么建议么?非常感谢。classProblem{public:vo

【C++修行之道】(引用、函数提高)

目录一、引用1.1引用的基本使用 1.2引用注意事项1.3引用做函数参数1.4引用做函数返回值1.5引用的本质1.6常量引用1.7引用和指针的区别二、函数提高2.1函数默认参数2.2函数占位参数2.3函数重载2.4函数重载注意事项一、引用1.1引用的基本使用作用:给变量起别名语法:数据类型&别名=原名引用是别名,即为某个变量提供的另一个名字。一旦引用被初始化为一个对象,它就不能被指向另一个对象。引用没有自己的内存地址,它与所引用的对象共享同一块内存地址。示例:intmain(){ //引用基本用法 //数据类型 &别名=原名 inta=10; //创建引用 int&b=a; cout  1.2

c++ - 三元运算符并通过常量引用延长临时对象的生命周期

看到之后alocalreference-to-constmayprolongthelifeofatemporary,我遇到了有条件地将本地常量引用绑定(bind)到函数参数或函数调用的临时结果的需要,即:classGizmo{//RuleofFivemembersimplemented};GizmoFrobnicate(constGizmo&arg);voidProcessGizmo(constGizmo&arg,boolfrobnicate){constFoo&local=frobnicate?Frobnicate(arg):arg;//Performsomeworkonlocal}

c++ - 现代 C++ 中对唯一指针的引用

这个问题在这里已经有了答案:shared_ptristoweak_ptrasunique_ptristo...what?(9个回答)关闭7年前。我有一个对象Window,它有一个成员std::unique_ptr.我使用一个唯一的指针,因为Window确实拥有纹理,并且在Window被销毁后使用所述纹理没有意义。窗口有一个方法,Texture&Window::getTexture().这个想法是有时Window外部的代码会说myWindow.getTexture(),对纹理做一些事情,然后完成它。风险在于有人持有在Window销毁后变得无效的纹理引用。我可以让窗口保持std::shar

c++ - 如何将 std::bind 作为通用引用类型传递?

据我了解,std::bind完美地转发它包装的可调用对象和该可调用对象的参数;std::bind返回对象本身是可移动和/或可复制的,具体取决于可调用对象及其参数是否可移动和/或可复制;一个std::bind返回对象可能是嵌套的,在这种情况下,外部std::bind返回对象是可移动和/或可复制的,就像绑定(bind)其他可调用对象时一样。因此,我希望下面的代码片段可以正常编译。相反,代码在main()中的最后两个语句中生成了大量编译器错误。.#includetemplatevoidcall_handler(HandlerType&&handler){handler();}template

c++ - 返回从成员映射的迭代器获得的 const 引用是否安全?

如果_map是类型std::unordered_map的成员,返回对的引用是否安全_map.find(k)->second来自一个函数,或者这是未定义的行为(或者只是不好的做法)?它似乎按预期工作,但感觉有点像返回对临时对象的引用。我不确定这是否属实,或者是否会产生其他意想不到的后果。#includeclassContainer{public:usingKey=int;//orsomethingmoreinteresting//++++++++++++++++++++++++++++++++++++++++++//|Isitsafetoreturnareferencehere?|//+

c++ - 非类型引用参数/参数

为什么非类型引用的模板参数不能是另一个引用(g++4.8.1):templatevoidtest(){}intx=5;int&p=x;intmain(){test();//compilesfinetest();//error:couldnotconverttemplateargument'p'to'int&'|}我看不到标准p哪里违反了任何内容,这些似乎是最相关的部分(N3337):[14.3.2][.1]Atemplate-argumentforanon-type,non-templatetemplate-parametershallbeoneof:—foranon-typetemp

c++ - 不同编译器引用未知边界数组的奇怪行为

案例一以下代码在MSVC和GCC中产生截然不同的结果:#includetemplatevoidfoo(constT&){#ifdef_MSC_VERstd::coutMSVC2013Update5、MSVC2015Update1(也在http://webcompiler.cloudapp.net上尝试了Update2,结果相同):foo(constchar*)GCC5.3.0、Clang3.7.0(DEMO):voidfoo(constT&)[withT=char[]]案例二现在让我们删除模板:#includevoidfoo(constchar(&)[]){std::coutMSVC产

c++ - 隐式转换为左值引用

我正在查看标准5.16第3段,试图了解发生了什么。考虑类型M定义为structM{M();M(constM&);M(M&&);};如果我有一个三元表达式pred?E1:E2,其中E1的类型是constM&,E2的类型是M&&5.16第3段第1点是否适用?—IfE2isanlvalue:E1canbeconvertedtomatchE2ifE1canbeimplicitlyconverted(Clause4)tothetype“lvaluereferencetoT2”,subjecttotheconstraintthatintheconversionthereferencemustbin