首页
学习
活动
专区
圈层
工具
发布

返回类型引用(ref-qualified)的C++成员函数暗示了什么?

一、引子:返回引用类型的成员函数是 暗示了使用它的this指针是左值还是右值。反过来说,如果一个成员函数不返回引用类型,那么对this指针是左值还是右值都是调用同一个函数。...----二、解释:先说结论,来说一个c++的一个理解。如果成员函数是有一致性(consistency)的,那么non-const, non-static的函数 总是要被&( &-qualified)。...----三、扩展当然书写设计自己的成员函数,不一定都有必要去做ref-qualified,但是这里我带你看一些使用ref-qualified的真实例子。...有时候一个成员函数需要有能力从类中取到资源,那么他就能被右值rvalue call到,否则,它就是const修饰的成员函数。...----四、未来C++23在 C++23 有显式的对象, 因为用户可以forward上次的references. 也有可能简单地写一个non-static成员函数。

61020
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C++】C++ 类中的 this 指针用法 ③ ( 全局函数 与 成员函数 相互转化 | 有参构造函数设置默认参数值 | 返回匿名对象与返回引用 )

    , 这个增加的参数是 对象本身的指针 ; 在 Student 类中 , 定义了如下函数 : // 成员函数 转为 全局函数 , 多了一个参数 Student* pThis 作为第一个参数 void...print 成员函数 , 转为 全局函数 , 转换后的代码为 : // 将成员函数 void print() // 转为 全局函数 void Student_print(Student* pThis)..., 将 两个 Student 对象相加 , 返回的是一个匿名对象 , 该匿名对象 是在 成员函数 中新创建的对象 ; // 成员函数中, 将两个 Student 对象相加 // 全局函数 转为 成员函数...是指针指向的 自身对象 return *this; } // 成员函数 转为 全局函数 , 多了一个参数 Student* pThis 作为第一个参数 void print() {...int height; // 身高 }; // 将成员函数 void print() // 转为 全局函数 void Student_print(Student* pThis) { cout

    1.9K20

    UNIX(多线程):19---Future 类型详解

    std::promise::get_future,get_future 为 promise 类的成员函数,详见 C++11 并发指南四(future> 详解一 std::promise 介绍)。...std::packaged_task::get_future,此时 get_future 为 packaged_task 的成员函数,详见C++11 并发指南四(future> 详解二 std::packaged_task...specialization (3) void futurevoid>::get(); // when T is void 当与该 std::future 对象相关联的共享状态标志变为 ready...后,调用该函数将返回保存在共享状态中的值,如果共享状态的标志不为 ready,则调用该函数会阻塞当前的调用者,而此后一旦共享状态的标志变为 ready,get 返回 Provider 所设置的共享状态的值或者异常...std::shared_future 其他成员函数 std::shared_future 的成员函数和 std::future 大部分相同,如下(每个成员函数都给出了连接): operator=():

    80720

    UNIX(多线程):12---async、future、packaged_task、promise

    这个std::future对象里边就含有线程入口函数所返回的结果(线程返回的结果),我们可以通过调用future对象的成员函数get()来获取结果。...下列程序通过std::future对象的get()成员函数等待线程执行结果并返回结果. 这个get()函数很牛,不拿到将来的返回值 誓不罢休,不拿到值我就卡在这里等待拿值。...std::futureint> ret = myTask.get_future(); //future包含有线程入口函数的返回结果,这里保存mythread的返回结果 cout get...std::futureint> ret = myTask.get_future(); //future包含有线程入口函数的返回结果,这里保存返回结果 cout get() int> ret = myTask2.get_future(); //future包含有线程入口函数的返回结果,这里保存返回结果 cout get() << endl; //主线程执行

    62920

    CC++开发基础——std::future与async异步编程

    一,std::future与std::promise std::future是一个类模板,存放了线程入口函数的返回结果,调用std::future对象的get()函数可以拿到返回结果。...因此,std::promise是线程计算结果的输入端,std::future是线程计算结果的输出端。 3.std::future的常用成员函数 1.get:阻塞式地获得线程返回结果。...4.std::promise的常用成员函数 1.set_value:指定线程返回结果。 2.get_future:返回与线程关联的future。 3.set_exception:指定线程返回的异常。...std::shared_future可以让多个线程共享同一个状态,从而实现多线程通信。 std::shared_future的常用成员函数 1.get:阻塞式地获得线程返回结果。...std::packaged_task是一个类模板,常用的成员函数是get_future(),用于返回一个关联的std::future对象,使用std::packaged_task时可以不需要显式地使用std

    2K10

    【Example】C++ 标准库多线程同步及数据共享 (std::future 与 std::promise)

    公共成员函数表: 名称 作用 operator= 移动 future 对象,移动! share() 返回一个可在多个线程中共享的 std::shared_future 对象。 get() 获取值。...future_status 枚举:为计时等待函数可返回的原因提供符号名称。...5,std::promise 的 set 操作函数只能被调用一次。 6,std::promise 的 get_future() 函数只能被调用一次。...get_future() 返回具有相关联异步状态的 std::future 对象。 operator() 执行该可调用对象。...若选择 async 策略,则关联线程的完成同步于首个等待于共享状态上的函数的成功返回,或最后一个释放共享状态的函数的返回,两者的先到来者。 完工!

    2.1K30

    【#2】介绍第三方库

    (2) 使用静态成员函数 如果你不需要访问非静态成员变量,可以将回调函数声明为静态成员函数。静态成员函数没有隐式的 this 参数,因此可以直接传递给 setConnectionCallback。...std::bind 或 Lambda 表达式可以将成员函数与对象绑定,生成符合要求的函数对象。 (2) 函数适配的核心思想 std::bind :将成员函数与对象绑定,并指定参数占位符。...std::future 并不能单独使用,而是需要搭配一些能够执行异步任务的模板类或者函数一起使用,异步任务搭配使用: std::asymc 函数模板:异步执行一个函数,返回一个 future 对象用于获取函数结果...我们可以使用 std::future:get() 函数来获取任务的结果,此函数会阻塞当前线程,直到异步操作完成。...执行任务包关联的 future 对象 std::futureint> fut1 = task1.get_future(); // 3.

    58600

    Java并发编程之Future与FutureTask

    简述 我们都知道实现异步可以通过Runnable接口来实现,但是Runnable接口是无法获取任务的返回值的,如果需要获取到任务的返回值,那么就需要利用Future机制了。...Future提供的api 1.cancel() 用来取消任务,如果取消任务成功则返回true,如果取消任务失败则返回false 2.isCancelled() 用来判断任务是否已经被取消,如果已经取消返回...4.get() 用来获取任务的返回结果,如果任务还没有结果,那么就会阻塞,直到任务结束获取到结果 5.get(long timeout, TimeUnit unit) 也是用来获取任务的返回结果的,如果任务还没有结果...,需要传递一个Callable,在构造函数中会把传进来的Callable保存到成员变量中,并且初始化FutureTask的状态为NEW状态。...(所有被get()方法阻塞的线程都需要被唤醒) private void finishCompletion() { // assert state > COMPLETING; for (

    54020

    C++基础 多线程笔记(二)

    future & async std::async为一函数模板,用来启动一 异步任务(即自动创建一线程并执行对应的线程入口函数),之后返回一个std::future对象(对象中包含线程函数的返回结果),...最后通过future对象的.get()成员函数来获取结果。....get()成员函数等待子线程返回结果,否则一直等待(注:只能get一次,多次调用则报异常) 与之类似的.wait()成员函数只等待结果,不获取结果(类似于join()) 如果.get()和 .wait...>using namespace std; int factorial(futureint>&f)//阶乘函数{ int res = 1; int N = f.get(); for (int i =...int> p;//主线程中的int变量(“约定型”变量) futureint> f = p.get_future();//该变量值的值约定从“将来”future获得 cout << "pass the

    71110

    Java并发编程之Future与FutureTask

    简述我们都知道实现异步可以通过Runnable接口来实现,但是Runnable接口是无法获取任务的返回值的,如果需要获取到任务的返回值,那么就需要利用Future机制了。...Future提供的api1.cancel()用来取消任务,如果取消任务成功则返回true,如果取消任务失败则返回false2.isCancelled()用来判断任务是否已经被取消,如果已经取消返回true...4.get()用来获取任务的返回结果,如果任务还没有结果,那么就会阻塞,直到任务结束获取到结果5.get(long timeout, TimeUnit unit)也是用来获取任务的返回结果的,如果任务还没有结果...,需要传递一个Callable,在构造函数中会把传进来的Callable保存到成员变量中,并且初始化FutureTask的状态为NEW状态。...(所有被get()方法阻塞的线程都需要被唤醒)ini 体验AI代码助手 代码解读复制代码private void finishCompletion() { // assert state > COMPLETING

    20500

    c++11线程池的实现原理及回调函数的使用

    c++11虽然加入了线程库thread,然而 c++ 对于多线程的支持还是比较低级,稍微高级一点的用法都需要自己去实现,还有备受期待的网络库,至今标准库里还没有支持,常用asio替代。...); std::vectorfutureint> > results; //lambada表达式 匿名函数线程中执行 pool.commit([] { std::cout...,可以获取执行返回值 //不直接支持类成员函数, 支持类静态成员函数或全局函数,Opteron()函数等 class ThreadPool { using Task = functionvoid...()获取返回值会等待任务执行完,获取返回值 // 有两种方法可以实现调用类成员, // 一种是使用 bind: .commit(std::bind(&Dog::sayHello, &...>::type, 函数 f 的返回值类型 auto task = make_shared>( bind(forward

    1.7K21

    UNIX(多线程):18---异步任务提供者(Provider) 介绍(续)

    std::packaged_task::valid 介绍 检查当前 packaged_task 是否和一个有效的共享状态相关联,对于由默认构造函数生成的 packaged_task 对象,该函数返回 false...\n"; return 0; } std::packaged_task::get_future 介绍 返回一个与 packaged_task 对象共享状态相关的 future...调用该函数一般会发生两种情况: 如果成功调用 packaged_task 所包装的对象,则返回值(如果被包装的对象有返回值的话)被保存在 packaged_task 的共享状态中。...如果被包装的任务是指向类的非静态成员函数的指针,那么 std::packaged_task::operator() 的第一个参数应该指定为成员函数被调用的那个对象,剩余的参数作为该成员函数的参数。...() 成员函数。

    50210

    std future get_waitkey(0)

    大家好,又见面了,我是你们的朋友全栈君 一、关于std::future成员函数wait_for(): 1.1 关于std::future_status: std::future_status是一个枚举类型...}; 1.2 wait_for(): 返回值类型为future_status,该函数将本线程阻塞在当前,并等待一段时间,后继续执行,若在等待时间内wait_for()绑定线程执行完毕,则返回ready...: 阻塞在wait_for()处等待异步线程结束 阻塞在get()处等待异步线程结束 阻塞在return 0;处等待异步线程结束 get()函数只能使用一次,因为get()函数的设计是一个移动语义,相当于将...在实际开发中,有时候某线程的值不止被一个线程所需要,而get()却只能只用一次,这时可以通过std::shared_future达到多次通过get()获取值的目的: std::futureint>myf...::shared_future即可多次调用get()获取线程返回。

    59430

    Java是如何实现Future模式的?万字详解!

    最重要的区别就是Thread是没有返回结果的,而Future模式是有返回结果的。 2 如何使用Future 前面搞明白了什么是Future,下面我们再来举个简单的例子看看如何使用Future。...从以上代码中可以看到,我们使用Future主要有以下步骤: 新建一个Callable匿名函数实现类对象,我们的业务逻辑在Callable的call方法中实现,其中Callable的泛型是返回结果类型;...Future.get()方法获取结果即可,此时若异步任务还没结束,此时会一直阻塞等待,直到异步任务执行完获取到结果。...void run(); } RunnableFuture是Future和Runnable接口的组合,即这个接口表示又可以被线程异步执行,因为实现了Runnable接口,又可以获得线程异步任务的执行结果...思考: FutureTask覆写的run方法的返回类型依然是void,表示没有返回值,那么FutureTask的get方法又是如何获得返回值的呢?

    68840

    来聊聊C++中头疼的线程、并发

    异步任务:自动创建一个线程并开始执行对应的线程入口函数,他返回一个std::future对象 这个future对象里面含有线程入口函数所返回的结果,我们可以通过调用future对象的成员函数get()来获取结果...t1.join(); std::futureint> res=mypt.get_future(); //std::future对象里包含线程入口函数的返回结果 cout...std::futureint> fu=myprom.get_future();//promise和future绑定,用于获取线程返回值 auto result=fu.get(); }...future其他成员函数\shared_future\atomic std::future成员函数 std::futureint> res=std::async(my_thread); std::...函数的设计是一个移动语义.再次对对象进行get时,自然就没东西可以get了. std::shared_future是个类模板,它的get()函数是复制数据,可以实现多次get std::futureint

    5.4K41
    领券