草庐IT

弱引用

全部标签

C++:左值引用和右值引用的转换

我想知道标准的哪些部分在以下代码段中指定:#includeclassA{};classB:publicA{};intmain(){std::unique_ptrbptr=std::make_unique();//(a)std::unique_ptraptr=std::move(bptr);//(b)std::unique_ptr&aptr_r=bptr;//(c)std::unique_ptr&&aptr_rr=std::move(bptr);//(d)return0;}(d)编译,(c)不编译。请在您的回答中包括标准的相关部分或适本地引用它们。仅供引用,Ubuntuclangvers

面试官:Java是值传递还是引用传递?

开篇先来曝答案,在Java 语言中,本质只有值传递,而无引用传递,解释和证明详见正文。说到值传递和引用传递我们不得不提到两个概念:值类型和引用类型。1、值类型通俗意义上来说,所谓的值类型指的就是Java中的8大基础数据类型:整数型:byte、int、short、long浮点型:float、double字符类型:char布尔类型:boolean从JVM层面来讲:所谓的值类型指的是在赋值时,直接在栈中(Java虚拟机栈)生成值的类型,如下图所示:2、引用类型引用类型是指除值类型之外的数据类型,比如:类接口数组字符串包装类(Integer、Double...)从JVM的层面来讲,所谓的引用类型是指,

c++ - 为什么这种访问冲突会发生在/Og 和/GL 标志上,并带有传递引用?

当(且仅当)我使用WindowsServer2003使用/Og和/GL标志编译我的程序时DDKC++编译器(它在WDK7.1和VisualStudio2010上很好!),我在运行时遇到访问冲突:#include#includetemplateboolless(Ta,Tb){returnas;for(inti=0;i);}当我将最后一行更改为时,访问冲突消失std::stable_sort(s.begin(),s.end(),&less);--换句话说,当我让我的项目被复制而不是仅仅被引用时,它就会消失。(我没有进行任何类型的多线程。)为什么会发生这样的事情?我是否通过const&调用了

c++ - 按值、引用和右值传递字符串

我只是比较将字符串传递给函数的性能。benchmarkresults很有趣。这是我的代码:voidadd(std::stringmsg){msg+="world";}voidaddRvalue(std::string&&msg){msg+="world";}voidaddRef(std::string&msg){msg+="world";}voidStringCreation(){add(std::string("hello"));}voidStringCopy(){std::stringmsg("hello");add(msg);}voidStringMove(){std::stri

java - Java 是否有等效的 const 引用?

这是一段代码://GameboardismadeupofSquares.AplayercanplaceGamePiecesonaSquare.publicclassCheckersBoard{publicbooleanPlaceGamePiece(GamePiecegamePiece,intnRow,intnColumn){returnm_theGameBoard[nRow][nColumn].PlaceGamePiece(gamePiece);}privateSquare[][]m_theGameBoard;}假设我正在测试PlaceGamePiece方法(使用junit)并且我需要

c++ - 绑定(bind)引用实际上是否评估操作数?

考虑这段代码:int&x=*newint;赋值的RHS是否实际上取消引用新创建的指针,导致UB由于读取未初始化的变量?或者这是否可以合法地用于以后分配一个值,如x=5;? 最佳答案 据我所知,您所做的一切都不涉及未定义的行为。但是,它确实会立即产生内存泄漏的风险。它可以快速解析(因为&x会解析到泄漏内存的地址,因此可以被删除)但是如果你要离开范围,你将无法检索该指针。编辑:切中要点,如果你要写的话int&x=*newint;x=5;std::cout>x;std::cout代码的行为就像您只是将x声明为intx;一样,除了指针在程序

c++ - 转发引用和正常引用的部分排序与推导指南

gcc8.0.0和clang5.0.0不同意这个程序的行为:#includetemplatestructA{A(constT&){std::coutA(U&&)->A;intmain(){inti=0;constintci=0;Aa1(0);//bothsayAAa2(i);//bothsayAAa3(ci);//gccsaysA,clangsaysA}gcc的行为对我来说没有意义-如果constT&重载优于U&&左值constint重载,对于右值int,为什么T&&重载优于U&&重载?clang对我来说更有意义(没有一个功能比另一个更专业,所以演绎指南胜出)。谁是对的?

Net 高级调试之六:对象检查之值类型、引用类型、数组和异常的转储

一、简介     今天是《Net高级调试》的第六篇文章。记得我刚接触Net框架的时候,还是挺有信心的,对所谓的值类型和引用类型也能说出自己的见解,毕竟,自己一直在努力。当然这些见解都是书本上的,并没有做到眼见为实,所以总是有些东西说不清楚。今天,我们就好好的说说C#的类型,是从内存级别、从底层来说一下值类型、引用类型到底是什么,它们在内存中的形态,还有也说说数组的内存形态,如何内部布局的,以及我们如何查找由未捕捉的异常引起的程序崩溃。这些都是基础的,如果这些掌握不好,以后的高级调试的道路,也不好走。自从我过了这一关,很多东西理解起来,比较透彻了,但是,还必须努力。当然了,第一次看视频或者看书,

android - JNI 保持对对象的全局引用,使用其他 JNI 方法访问它。在多个 JNI 调用中保持 C++ 对象存活

我刚开始使用JNI,但遇到以下问题。我有一个包含简单类的C++库。我从JavaAndroid项目中调用了三个JNI方法,分别实例化所述类、调用实例化类的方法并销毁它。我保留了对该对象的全局引用,因此我可以在其他两个JNI方法中使用它。我怀疑我做不到。当我运行该应用程序时,出现运行时错误(使用过时的引用),我怀疑这是因为全局引用在后续调用其他JNI方法时无效。是实现我想要的(让对象在多个JNI调用中存在)的唯一方法,实际上将指向实例化类的指针传回Java,将其保留在那里,然后将其传回JNI功能?如果是这样,那很好,我想确保我不能用全局引用来做到这一点,而且我不仅仅是遗漏了什么。我已经阅读

c++ - 数值 vector 运算符重载+右值引用参数

我有下面的数字vector模板类(用于数值计算的vector)。我正在尝试使编写D=A+B+C成为可能,其中所有变量都是Vector对象。A、B和C不应修改。我的想法是使用Vectoroperator+(Vector&&B)以便在(希望如此)从B+C返回RvalueVector之后,所有随后的添加存储在该对象中,即为所有后续添加窃取Rvalue的存储。这是为了消除新对象的创建和所需的存储。我的问题是,我可以从每个调用的函数的输出语句中看到,从未调用过Vectoroperator+(Vector&&B)。我不明白为什么,因为如果我有一个重载的虚拟函数foo(Vector&&B)和foo(