草庐IT

弱引用

全部标签

c++11 decltype 返回引用类型

我有点困惑为什么在某些情况下使用逗号运算符的decltype会返回引用类型。例如,在这段代码中:inti=101;decltype(1,i)var=i;var=20;printf("%d\n",i);//willprint20在这里,var是int&而不是int,但是如果我将第二行替换为:decltype(i)var=i;它将返回int!谁能解释一下? 最佳答案 decltype是特殊情况,用于未加括号的id-expression以给出实体的类型,没有引用限定[dcl.type.simple]:4-Thetypedenotedbyd

c++ - 如何通过引用传递函数?

我有一个具有独立功能的C++程序。由于团队中的大多数人对面向对象的设计和编程经验或知识不多,因此我需要避免使用函数对象。我想将一个函数传递给另一个函数,例如for_each函数。通常,我会使用函数指针作为参数:typedefvoid(*P_String_Processor)(conststd::string&text);voidFor_Each_String_In_Table(P_String_Processorp_string_function){for(unsignedinti=0;i我想删除指针,因为它们可以指向任何地方,并且包含无效内容。有没有一种方法可以通过引用传递函数,类似

c++ - 写入 ostream 的常量引用

我正在阅读C++primer。我遇到了以下代码:#include#includeusingnamespacestd;classPrintString{public:PrintString(ostream&o=cout,charc=''):os(o),sep(c){}voidoperator()(conststring&s)const{os此代码有效,但我不知道为什么。以下是我的想法,如果有人能帮助指出我错在哪里,那就太好了......这里,'printer'是一个constPrintString对象,所以它的数据成员是const,所以'printer.os'是对cout的const引用

c++ - 引用初始化表格

所以我正在测试一些引用初始化形式,描述here.我想知道什么时候:T&ref={arg1,arg2,...};和T&&ref={arg1,arg2,...};表格将永远被使用,并且究竟是为了什么。我想这是为了用“initializer_list”初始化临时数组和构造函数,如下所示:intmain(){struct_ab{_ab(){coutiArr):a(*iArr.begin()),b(*iArr.end()){cout在这种情况下,我尝试使用默认构造函数使用临时“_ab”对象初始化const引用,如下所示:intmain(){struct_ab{_ab(){coutiArr):a(

c++ - 当 const 引用绑定(bind)到临时引用时,堆栈中会发生什么?

C++标准允许将const引用绑定(bind)到右值,从而延长临时对象的生命周期,直到引用超出范围。但是,我无法弄清楚这实际上是如何编译的,让我用一个例子来解释:std::stringfoo(){returnstd::string("foo");}voidbar(){VeryBigObjectobj;//Perhapsdosomethingwiththebigobject}intmain(int,char**){conststd::string&foo_str=foo();bar();return0;}据我所知,以x86架构为例,首先调用函数foo()并在堆栈中构造字符串对象,这意味着

c++ - 使用 const bool 引用进行后台任务取消跟踪? (C++)

我有一个桌面应用程序,当用户请求时,某些计算在后台线程中运行。有一个取消按钮。我知道向后台任务发出取消信号的“安全”或“正确”方式(使用Qt信号/槽连接、后台任务轮询的互斥体包装bool值等)。然而,在我看来最简单的事情是在我的主线程类中有一个boolcancelled,它在按下Cancel按钮时同步设置,并传递一个constbool&cancelled到它轮询的后台线程。这种方法是否有任何现实的方法会适得其反? 最佳答案 线程可以在不同的处理器上运行,每个处理器都有自己的缓存。如果bool值是原子的,你可以这样做。否则,您可能会面

c++ - std::function 签名指针 vs 指针引用 = 没有区别?

这是代码示例:#include#includestructFoo{};typedefboolfunc_type(Foo*&,conststd::string&);typedefstd::functionFunctionalType;boolf(Foo*,conststd::string&){}intmain(){#if1func_type*func;func=f;#elseFunctionalTypef2;f2=f;#endif}如您所见,我已将“对指针的引用”声明为第一个参数的函数类型Foo*&,我希望该函数仅以“指针”作为第一个参数Foo*不能分配给这种类型的变量。#if1regi

c++ - 返回常量引用

我对返回const对临时对象的引用的函数声明有些困惑。在下面的代码中#include#includeusingnamespacestd;conststring&foo(){returnstring("foo");}stringbar(){returnstring("bar");}intmain(){conststring&f=foo();conststring&b=bar();cout方法foo和bar有什么区别?为什么foo给我warning:returningreferencetolocaltemporaryobject[-Wreturn-stack-address]。不是在con

C++:通过引用按值返回

我正在寻求澄清,当一个人在函数中返回对该对象的引用并返回该对象的类型时,到底发生了什么。考虑以下函数:CObjectgetObject(){CObjectlocalObject;CObject&objectRef(localObject);returnobjectRef;}据我了解,此函数将返回“localObject”的拷贝,而不是返回对“localObject”的引用。这个对吗?它本质上是创建并返回一个以localObject作为构造函数参数的新对象吗?例如,CObjectnewObject(localObject); 最佳答案

c++ - 在 C++ 中通过引用传递三维数组

函数定义为:intstrip(double*signalstnV){..return0;}主要函数被称为:main{..doublesignalstnV[iteration][2*range+1][3];..check=strip(signalstnV);.}在strip函数中修改后,我想在main的next函数中使用数组。但是在编译过程中出现如下错误sim.C:在函数‘intmain(int,char**)’中:sim.C:54:26:错误:无法将参数“1”的“double()[151][3]”转换为“double”到“intstrip(double*)”'检查=strip(sign