草庐IT

弱引用

全部标签

c++ - 如何强制不修改引用变量的任何部分?

当引用某物时,可以添加额外的const限定符,以便不能修改引用的变量,如下所示:int*ptr;intconst*const&rptr=ptr;//ptrcan'tbechangedand*ptrcan'tbechanged或者像这样,使用一个数组:intarr[1];intconst(&rarr)[1]=arr;//arr[0]can'tbechanged或者甚至像这样,使用指针数组:int*ptrarr[1];int*const(&rptrarr)[1]=ptrarr;//ptrarr[0]cannotbechanged,but*ptrarr[0]canbe那么,为什么我不能将这些

c++ - 模板用户定义转换为抽象类引用和英特尔编译器

我有以下(非常简化的)“容器”类:classcontainer{public:templatecontainer(constboost::shared_ptr&rhs):m_content(rhs){}templateoperatorTconst&()const{returnget();}templateTconst&get()const{return*boost::any_cast>(m_content);}private:boost::anym_content;};它应该将对象存储在boost::any中共享指针形式的容器。如果我存储一些对象,比如说boost::shared_pt

c++ - 检测基类分配给指向派生类的引用

我目前正在研究多态类型和赋值操作之间的相互作用。我主要担心的是,是否有人可能会尝试将基类的值分配给派生类的对象,这会导致问题。来自thisanswer我了解到基类的赋值运算符总是被派生类的隐式定义的赋值运算符隐藏。所以对于简单变量的赋值,不正确的类型会导致编译器错误。但是,如果赋值是通过引用发生的,则情况并非如此:classA{public:inta;};classB:publicA{public:intb;};intmain(){Aa;a.a=1;Bb;b.a=2;b.b=3;//b=a;//good:won'tcompileA&c=b;c=a;//bad:inconcistenta

c++ - 模板中右值引用和 const 左值引用之间的重载

我想根据参数是否为临时对象来重载两个函数,所以我这样写代码:#includevoidf(int&&){std::cout它正确地输出:const&&&但是,当我更改代码以使用这样的模板时:#includetemplatevoidf(T&&){std::coutvoidf(constT&){std::cout输出变为:&&&&有什么问题?使用模板时如何针对可移动的临时对象进行优化?编辑:其实这是我看C++Primer时的测试代码。它说:templatevoidf(T&&);//bindstononconstrvaluestemplatevoidf(constT&);//lvaluesan

c++ - 通过引用传递数组 - 较大数组的子集

我知道还有其他实现方法或使用容器。这只是为了满足我的好奇心。假设我有以下代码:voidbyref(int(&a)[5]);intmain(){inta[5];byref(a);}通过引用传递C风格数组的一个优点是sizeof将对其起作用,std::end也是如此。但现在只能传递恰好这个大小的数组。是否可以通过引用将较大数组的子集传递给此函数?例如,我想这样做:intmain(){inta[10];byref(a+1);}有什么方法可以让它工作吗?我构建并运行了它,在VS2015中给出了预期值,但当然代码看起来很不可靠:byref(reinterpret_cast(*(a+1)));

c++ - 未定义对 QMediaPlayer 和 QVideoWidget 的引用

尽管我在我的.pro文件中声明了QT+=multimediamultimediawidgets,但我收到错误未定义对QMediaPlayer和QVideoWidget构造函数、析构函数和方法的引用,我包含了路径在我的.pro文件中将/usr/include/QtMultimetiaKit中的那些文件像这样INCLUDEPATH+=/usr/include/QtMultimediaKit/,但错误是一样的,还有什么可以尝试的?我在Ubuntu14.04.3上运行Qt4.8.6和QtCreator3.5.1。 最佳答案 您需要添加到.p

c++ - Lua:C++ 模块不能互相引用, undefined symbol

我创建了两个模块(共享对象)CPU和SaveState作为模拟器的一部分。两者都独立编译成.so单独的文件,并在运行时由Lua脚本使用require()加载;即:SaveState=require("SaveState")CPU=require("CPU")在CPU中,有一个对SaveState进行操作的方法:intCPU::save_state(SaveState*state){state->begin_section(savestate_namespace,savestate_data_size);state->write16(this->reg.af);state->write1

c++ - 为什么在右值的情况下转发引用不推导出右值引用?

我理解,给定一个初始化转发/通用引用的表达式,左值被推断为T&类型,右值被推断为T(而不是T&&).因此,为了只允许右值,需要这样写template>,OtherConds...>=yes>voidfoo(T&&x){}不是,template,OtherConds...>=yes>voidfoo(T&&x){}我的问题是,为什么对于转发引用,右值被推导为T而不是T&&类型?我想,如果它们被推断为T&&那么同样的引用折叠规则也可以作为T&&&&与T&&相同。 最佳答案 因为在当时,将右值A参数推导为A&&而不是A被视为不必要的复杂化并

python - 使用 Cython 时如何将一个 C++ 类(引用)传递给另一个类?

我正在尝试使用Cython包装一个C++模块,以便我可以在Python中使用它。该模块有多个类,其中一些类的方法将对另一个类的对象引用作为参数。假设我有一个名为“foo”和“bar”的C++类,然后用cython将它们包装起来:cdefexternfrom"foobar.hpp"namespace"foobar":cdefcppclassfoo:passcdefcppclassbar:voidkungFoo(foo&f)现在我想制作一个包装类,以便我可以在Python中使用它...cdefclasspyFoo:cdeffoo*thisptrdef__cinit__(self):self

c++ - 在 QML 插件中注册一个 C++ 抽象类并从 QML 中引用它

我正在编写一个Qt应用程序。我已将我的应用程序分为QML前端和C++插件后端。在我的C++插件中,我有一个Session抽象类,我想将其公开给QML,我也有该类的一些实现。我希望我的QML前端只知道Session类,而不用担心它是哪种session的具体细节。我尝试了qmlRegister*的几种变体以使用QML注册我的session类型,但要么session需要具体(如qmlRegisterType的情况),要么它注册得很好,但我根本无法像propertySession中那样从QML引用session类型session甚至没有从QML实例化Session。有谁知道我应该如何处理这个问