草庐IT

弱引用

全部标签

c++ - 为什么不通过引用传递数组?

为什么x打印出1,2,3,4而不是4,3,2,1。当我打印input[0]时,它说4。数组不应该通过引用传递吗?所以我可以用x来指代最初是x的输入吗?顺便说一下,这是C++。这不是另一个问题的重复。如果我在revlisto中打印出数组,它会正确打印。问题在于在主函数中可调用的数组。usingnamespacestd;voidrev_listo(intinput[],intnum){intend_list[num];for(intx=0;x 最佳答案 在内部,当您执行voidrev_listo(intinput[],intnum)时,

c++ - 引用传递行为及其范围

在下面的代码中,变量a通过引用传递给构造函数,由参数x接收。然后x作为对属性的引用传递。然后用值3初始化该属性。程序在运行时输出值3。我的问题程序不应该崩溃或显示2因为在构造函数被调用之后x应该超出范围并被释放,它的地址应该被释放。并试图写入它应该会导致内存访问冲突。然而在这种情况下,x仍然在程序控制下,保存着'a'的地址这是有效的C++行为还是我遗漏了什么?#include#includeusingnamespacestd;classmyclass{public:int&attribute;myclass(int&x):attribute(x){}voidfunc(){attribu

c++ - 在 CodeBlocks 中查看语言 (C/C++) 引用/文档

我在StackOverflow上的第一个问题...有人知道通过CodeBlocks查看语言的引用/文档手册的方法吗?专门针对C/C++。例子:假设我想查找strncpy()的引用。在一个非常古老的Borland系统(我们在学校使用的系统)中,我会写下这个词并在其上单击鼠标中键,从而将其作为引用。如果能以某种方式浏览手册也很好。我是否完全忽略了这一点(也在谷歌搜索),或者它不见了?如果它丢失了,在不在线的情况下搜索C和/或引用手册的最快方法是什么?问候! 最佳答案 是的,这是可能的。不过,我不确定帮助文件本身。该过程似乎已记录在案he

java - 您对C、C++和Java中的指针、引用和句柄有何深刻理解?

您对C、C++和Java中的指针、引用和句柄有何深刻理解?我们通常把指针、引用和句柄放在特定的语言层面上去思考,像我这样的新手很容易搞混。其实java中的那些概念,只是对指针的一种封装。所有的指针只是对主存地址的一种封装。所以所有这些,只是一个封装的诡计。以上都是我个人的一瞥。你的理解是什么?欢迎与我分享。 最佳答案 每种语言在这方面都有差异。在C中,只有指针是保存内存地址的变量。在C中,您可以使用指针算法在内存中移动,如果您有一个数组,您可以获得指向第一个元素的指针并通过递增指针来导航内存。Java引用类似于指针,因为它们引用内存

c++ - <函数> 引用自;找不到符号

我有一段C++函数使用的C代码。在我的C++文件的顶部,我有一行:#include"prediction.h"在prediction.h我有这个:#ifndefprediction#defineprediction#include"structs.h"typedefstruct{doubleestimation;doublevariance;}response;responserunPrediction(intobs,location*positions,double*observations,inttargets,location*targetPositions);#endif我还有

c++ - 我经常在运算符重载定义中看到什么引用?

比如在OGRE3D引擎中,经常看到类似的东西class_nameclass_name::operator+(class_name&object)代替class_nameclass_name::operator+(class_nameobject)嗯,这并不是说我更喜欢第二种形式,而是在输入中使用引用有什么特殊原因吗?它是否有需要使用引用而不是按值复制的特殊情况?还是性能问题? 最佳答案 这是一个性能问题。通过引用传递通常比通过值传递更便宜(它基本上等同于通过指针传递)。在一个不相关的注释中,您可能希望operator+的参数是con

C++ 删除引用

我仍在学习C++,并且有一个可能很明显的问题,或者我只是不知道我想做什么。我有一些函数可以接受一个矩阵(我写的一个类,它有一个正确编写的析构函数)并从中创建一个新矩阵,返回对新矩阵的引用。我需要在这些矩阵上迭代可能数万次,因此我需要确保没有任何内存泄漏。所以,问题是,如何正确删除不再需要的矩阵以便为下一个矩阵腾出空间?这是我试图实现无泄漏的代码:DynamicMatrixx0=getX0(n);DynamicMatrixexactU=getExactU(n);DynamicMatrixb=getB(n)*w;DynamicMatrixx1=getX1(x0,b,w,n);while(!

c++ - 使用单个值引用二维数组中的元素

我可能遗漏了一些基本的东西,但我找不到以下问题的解决方案。我有一些浮点元素的二维数组,我试图找到一种方法来仅使用单个值来引用它们。示例:floattest[5][50];test[3][25]=34.67;cout我希望从两个cout中得到相同的结果。相反,我的输出看起来像这样:34.67Segmentationfault我做错了什么?谢谢! 最佳答案 未经测试,我认为这样的方法可能有效。请注意,C++数组从左维度到右维度是major->minor。floattest[5][50];test[3][25]=34.67;cout

c++ - lambda:应该通过引用捕获 const 引用产生未定义的行为吗?

我刚刚在我的代码中发现了一个讨厌的错误,因为我通过引用捕获了对字符串的const引用。当lambda运行时,原始字符串对象早已不复存在,引用的值是空的,而目的是它将包含原始字符串的值,因此出现错误。让我感到困惑的是,这并没有在运行时引发崩溃:毕竟,这不应该是未定义的行为,因为afaik有一个悬空引用吗?此外,在调试器下查看id时,它看起来甚至不像垃圾,而是像一个正确构造的空字符串。这是测试用例;这只是打印一个空行:typedefstd::vector>functions;voidAddFunction(conststd::string&id,functions&funs){funs.p

c++ - 右值引用和完美转发

我读过一些关于&&的论文,我只是好奇是否有:voidfnc_1(int&&p){//...}voidfnc(int&&r){fnc_1(r);//amIsupposeto/shouldI?callitlikeso:fnc_1(std::forward(r))}还是只传递'r'就足够了? 最佳答案 fnc_1(r)不会编译,因为r是一个左值,就像任何其他变量一样,无论类型如何。是的,没错,命名右值引用是左值,而不是右值。fnc_1(std::forward(r))也不会编译,因为std::forward专门设计为不推断其模板参数。要传