草庐IT

弱引用

全部标签

c++ - 引用或指针更快吗?

据我所知,引用只是变量的另一个名称,而指针是它们自己的变量。指针占用空间。人们经常说“使用引用或指针”,但他们并没有说哪个更好。如果引用不占用自己的内存,那么引用将在该部门获胜。我不知道编译器是否区分引用和普通变量。如果你对一个引用进行操作,它会编译成与普通变量相同的代码吗? 最佳答案 内部引用也是用指针来实现的。所以,很难说指针/引用哪个更快。这两者的用法有所不同。例如,您想通过引用将参数传递给函数。voidfunc(int&a)case_1{//NoneedtocheckforNULLreference...}voidfunc(

c++ - 在 STL 中使用引用计数的数据结构有哪些行为异常?

ScottMeyer在“EffectiveSTL”中说,在决定使用哪种数据结构时要考虑的事情之一是容器是否使用引用计数。他说这种方法存在一些行为异常。其中有哪些?为什么像“string”和“rope”这样的容器会出现异常行为? 最佳答案 正如其他人所说,典型的例子是std::string。除了多线程程序中锁定的性能问题外,引用计数字符串还存在无线程问题。想象一下:strings="hello";stringt=s;//sandtsharedatachar&c=t[0];//copymadehere,sincetisnon-const

C++11 非拥有引用/指向 unique_ptr 的指针?

这不是“如何做”的问题,而是“如何以正确的方式做”的问题我正在Qt中开发一个编辑器,其中不同的小部件显示子项及其(成员)变量。这些小部件中的每一个都应该保存一个指向已编辑子项的引用/指针,以显示和更改它们的成员变量。第一次尝试是我学习(并且仍然有点坚持)的旧ANSIC方法,使用指向所用对象的简单原始指针。它工作正常,但由于C++11标准支持智能指针并建议使用它们,我正在尝试使用它们。问题是,我不太确定在这种情况下使用它们的“最佳方式”是什么......看完SmartPointers:Orwhoownsyoubaby?和WhichkindofpointerdoIusewhen?和其他一些

c++ - 具有代理迭代器/引用和自动的容器

我正在实现一个容器,其代理迭代器/引用类型类似于std::vector并与以下问题发生冲突,我将继续用std::vector来举例说明(这个问题与std::vector无关!):#include#includeintmain(){usingnamespacestd;vectorvec={true,false,true,false};autovalue=vec[2];//expect:"vector::value_type"constauto&reference=vec[2];//expect:"vector::const_reference"static_assert(is_same:

状态错误CS0234命名空间“Windows”中不存在类型或命名空间名“Management”(是否缺少程序集引用?)

用源码编译的UE4.27时,先是打包的时候打包失败,然后看错误里提示AutomationTool构建失败。又去项目里生成AutomationTool又出现了一堆错误。使用的是官方git仓库说明的VS2017,研究了几天编译4.26也有一样的问题。最后查来查去总算知道了是缺少Windows10SDK(10.0.18362.0),但是在2017的VisualStudioInstaller里并没有该项,我电脑上还装了一个2022的版本,找了下有这个SDK,点2022的修改,增加C++的游戏开发、UnrealEngine安装程序、NuGet包管理器安装后,原来那个VS2017的项目就可以正常编译了。可

c++ - 通过引用传递给模板函数

我有一个查找最大值的函数,我想通过引用发送静态数组,为什么这不可能?templateTfindMax(constT&arr,intsize){...}intmain{intarr[]={1,2,3,4,5};findMax(arr,5);//Icannotsenditthisway,why?return0;} 最佳答案 使用正确的语法。将签名更改为:templateTfindMax(constT(&arr)[size]){...}或者您可以使用std::arrayfindMax()的参数功能。LiveExampleWhyisn'tt

c++ - 为什么在 lambda 中通过引用捕获不会改变变量的类型?

我认为通过引用捕获会改变变量的类型。让我们考虑以下示例:#include#includeintmain(){intx=0;int&x_ref=x;constintx_const=x;constint&x_const_ref=x_const;autolambda=[&](){static_assert(std::is_same::value,"!");static_assert(std::is_same::value,"!");static_assert(std::is_same::value,"!");static_assert(std::is_same::value,"!");};l

c++ - 为什么 const 右值限定的 std::optional::value() 返回一个 const 右值引用?

std::optional::value()有以下两个重载constexprT&value()&;constexprconstT&value()const&;constexprT&&value()&&;constexprconstT&&value()const&&;返回const右值引用有什么意义?我能想到的唯一原因是让编译器能够帮助捕获以下(真的很奇怪)情况下的未定义行为autor=std::cref(const_cast&&>(std::optional{}).value());如果std::optional::value()返回了一个constT&,那么上面的代码将编译并在时导致

c++ - 未定义对 avcodec_alloc_context 的引用但 ffmpeg 链接器顺序正确吗?

我想构建静态链接到libavcodec和libavformat的静态链接可执行文件。静态ffmpeg库是用以下方法构建的:./configure--enable-static--enable-gpl--enable-nonfree--disable-vaapi--disable-libopus--prefix=myBuild--disable-swresample链接器设置如下:g++-O2-static-omyBinmyBin-myBin.osomeotherlibraries.a-L/ffmpeg/myBuild/lib-lavformat-lavcodec-lavutil-lrt

c++ - Const 限定符和前向引用

在seastar中看到过这段代码框架templateclasslambda_taskfinal:publictask{Func_func;public:lambda_task(scheduling_groupsg,constFunc&func):task(sg),_func(func){}lambda_task(scheduling_groupsg,Func&&func):task(sg),_func(std::move(func)){}virtualvoidrun_and_dispose()noexceptoverride{_func();deletethis;}};template