草庐IT

弱引用

全部标签

c++ - 传递对 C++ 构造函数的引用并将它们保存为引用或非引用类型

我想知道这些是否基本相同。classExampleClass{public:ExampleClass(Object&newObj):obj(newObj){}private:Objectobj;}classExampleClass2{public:ExampleClass2(Object&newObj):objReference(newObj){}private:Object&objReference;}那么这对任何一个类都不起作用吗?ExampleClass*getExampleObject(){Objectobj;returnnewExampleClass(obj);}Exampl

C++ 返回对临时对象的引用或将它们存储在对象中

考虑以下处理const引用的代码:constint&func(constint&x){returnx;}structFoo{Foo(constint&x):m_x(x){}constint&getX(){returnm_x;}constint&m_x;};我想知道现在允许以下哪些(如果有的话):intx=func(int(7));inty=Foo(int(7)).getX();是否可以保证临时int对象在被赋值或getX使用之前仍然存在?更新:看来这是安全的-但究竟是为什么呢?是否因为临时对象以递归方式绑定(bind)到const引用,并且只要对它们的绑定(bind)引用存在,就保证存

c++ - 为什么我的 Curiously Recurring Template Pattern (CRTP) 不能引用派生类的 typedef?

这个问题在这里已经有了答案:C++staticpolymorphism(CRTP)andusingtypedefsfromderivedclasses(5个答案)关闭9年前。使用curiouslyrecurringtemplatepattern时,如果我试图从基类中引用属于派生类的typedef,则仅无法引用它们;gcc提示notypenamed'myType'inclassDerived.这似乎与使用typedef、模板和奇怪的重复关系的其他方式不一致。考虑:/*crtp.cpp*/#includeusingnamespacestd;//case1.simple.classBase{

c++ - 将引用参数分配给局部变量

以下代码是否调用了任何类型的实现定义或未定义的行为?我不确定与引用文献的交互是如何进行的,我的Google/SO搜索结果是空的:structS{inti;};voidFn(S&s_arg){Ss_fn{s_arg.i+1};s_arg=s_fn;}intmain(intargc,char**argv){Ss_main{15};Fn(s_main);return0;}当赋值发生在Fn中时,我不确定应该发生两者中的哪一个:S的默认复制赋值运算符在s_main上调用(作为s_arg引用的目标),从本地复制数据(到Fn)s_fn到main的本地s_main(通过s_arg引用,使一切正常和定义

c++ - mingw下Qt 5静态编译失败引用off64_t

我尝试制作静态qt,但在mingw-make期间出错。这是错误文本。static\qhttpnetworkreply.oaccess\qhttpnetworkreply.cppInfileincludedfrom..\..\mkspecs\win32-g++/qplatformdefs.h:56:0,fromaccess\qhttpnetworkreply_p.h:55,fromaccess\qhttpnetworkreply.cpp:42:c:\mingw\include\io.h:301:14:error:'off64_t'doesnotnameatype__CRT_INLINEo

c++ - 如何在 std::set 中存储指向对象的指针(或引用)

在C++11STL中是否有适当的方法将对象指针存储在std::set中?,并让它们按对象的operator正确排序方法?当然,我也可以自己编写Compare输入并将其传递给set作为它的第二个模板参数,但我想STL会提供一种更方便的方法。谷歌搜索显示std::reference_wrapper,在我看来应该允许这样的代码:#include#includestructT{intval;booloperatorval>s;Ta{5};s.insert(a);}但实际上,这会导致编译错误:clang++-std=c++11-Wall-Wextra-pedantictest.cpp-otest

c++ - const 引用是错误的 C++ 11

我在YouTube上观看BjarneStroustrup,我试图弄清楚为什么这被认为是糟糕的,因为他说这是C++98风格的糟糕代码voidsetInt(constunsignedint&i)voidtakeaString(conststd::string&str)我的意思是你正在传递一个对常量的引用,这样你就可以省去复制操作,而且它甚至不像传递指针那样使用,所以它不必取消引用,所以为什么不好? 最佳答案 在C++11之前的版本中,一般的经验法则是如果您不修改参数,则按值传递内置类型,并按const&传递类或结构的对象,因为类或结构的

c++ - 关于具有自引用的 C++ 类

我有点糊涂了......为什么在C++中允许这样做:staticintt=0;classA{public:A():m(t++){cout=5){Aa;//但这不是:staticintt=0;classA{public:A():m(t++){cout第二个没有按预期进行编译(是的,我知道为什么它没有编译:此时代码中的A仍然不完整)...但是......第一个编译得很好(并且做了它应该做的事情,即:在像这样的语句上使应用程序崩溃:Aa[10];)。A是构造函数中的完整类型吗?还可以为我指出一些针对这种情况的C++标准条目吗? 最佳答案

c++ - 为什么类持有可复制的引用?

有一个持有引用的类,我希望下面的代码会失败,但它可以编译:#includestructReferenceHolder{std::string&str;ReferenceHolder(std::string&str):str(str){}};//Whydoesthiscompile?ReferenceHolderf(){std::stringstr="Hello";returnReferenceHolder(str);}intmain(){ReferenceHolderh=f();std::cout编译器:g++4.7.2(带-std=c++11)编辑:即使使用-fno-elide-co

c++ - 优化器删除指针取消引用行

我遇到一个问题,优化器似乎删除了非常必要的代码行。一些背景:我有一个连接PCIe驱动程序的程序。我有一个整数指针UINT32*bar_reg;指向我正在通信的BAR寄存器的用户空间地址。要写入寄存器,我只是取消引用指针。*(bar_reg+OFFSET)=value;没有优化,这工作正常。但是,一旦我打开任何级别的优化,所有取消引用指针的行都会被删除。我最终发现这一点的方法是在VisualStudio中单步执行。但是它独立于平台发生。到目前为止,我已经能够在关闭优化器的情况下过关,但是有人在Linux中使用我的库代码现在想打开优化器。所以我很好奇为什么会出现这个问题以及最合理的修复/解