草庐IT

multiple-variable-return

全部标签

C++11 - 无法使用 std::thread 和 std::condition_variable 唤醒线程

当我试图通过另一个线程唤醒一个线程时遇到了一个问题。一个简单的生产者/消费者。代码下方。第85行是我不明白为什么它不起作用的地方。生产者线程填充std::queue并调用std::condition_variable.notify_one()而消费者线程正在等待NOTstd::queue.empty()。在此先感谢您的帮助#include#include#include#include#include#include//requestclassrequest:publicstd::mutex,publicstd::condition_variable,publicstd::queue{

c++ - std::unique_lock 和 std::condition_variable 如何工作

我需要弄清楚lock和condition_variable是如何工作的。在此处的-稍微修改过的代码中cplusplusreferencestd::mutexm;std::condition_variablecv;std::stringdata;boolready=false;boolprocessed=false;voidworker_thread(){//Waituntilmain()sendsdatastd::unique_locklk(m);cv.wait(lk,[]{returnready;});//afterthewait,weownthelock.std::coutlk(m

c++ - 奇怪的运算符重载, "operator T& () const noexcept { return *_ptr; }"

我研究了一下,operator函数的格式是(returnvalue)operator[space]op(arguments){implementation}但是,在std::reference_wrapper实现中,有一个运算符重载函数声明为operatorT&()constnoexcept{return*_ptr;。这个运算符和T&operator()constnoexcept{return*_ptr;不同吗?}?.如果两者不同,那么第一个有什么用? 最佳答案 运算符T&()constnoexcept;是一个user-define

c++ - 什么时候可以在没有谓词的情况下使用 std::condition_variable?

如果std::condition_variable可以由于虚假唤醒而发出信号(并且我们不能确定我们需要的条件是否真的得到满足),为什么C++标准库提供重载没有谓词的wait()方法?什么场景可以使用这种行为? 最佳答案 假设一个复杂条件:A||B。当条件的任何部分为真时,应执行适当的操作,actionA或actionB。使用predicate版本,代码如下:cond.wait(lock,[]{return(A||B);});if(A){actionA();}else{actionB();}但如果使用非谓词等待,代码可能更快:whil

c++ - 为什么 std::condition_variable 的通知和等待函数都需要一个锁定的互斥量

在我对理解std::contion_variable的永无止境的探索中,我遇到了以下问题。在thispage它说了以下内容:voidprint_id(intid){std::unique_locklck(mtx);while(!ready)cv.wait(lck);//...std::cout然后它说:voidgo(){std::unique_locklck(mtx);ready=true;cv.notify_all();}据我所知,这两个函数都将在std::unqique_lock行停止。直到获得唯一锁。也就是说,没有其他线程有锁。假设print_id函数首先执行。将获取唯一锁,函数

c++ - 警告 : function uses 'auto' type specifier without trailing return type

下面的代码给出了下面的警告。有人可以解释原因吗(请注意代码没有用,因为我用int替换了我的类型来制作一个完整的示例)。警告:“MaxEventSize()”函数使用“auto”类型说明符而没有尾随返回类型[默认启用]想法是获取特定结构的最大大小(类型位于int所在的位置)。templateconstexprTcexMax(Ta,Tb){return(a 最佳答案 auto返回类型“没有尾随返回类型”是C++14的一个特性,所以我想你正在编译C++11。您的代码适用于C++14,但对于C++11,如果您想使用auto作为返回类型,您需

c++ - 变长数组 : How to create a buffer with variable size in C++

我目前正在编写一个移动平均线类。目标是在创建Running_Average类的新对象时能够将缓冲区大小指定为构造函数的一部分。#include#include"Complex.h"#include#include#include#includeusingnamespacestd;classRunning_Average{public:doublesum=0;doubleaverage=0;inti;doubleAverage(void);//MemberfunctionsdeclarationvoidAddSample(double);Running_Average(int);};Ru

c++ - GCC 选项 : warning on non-void functions without a return statement

如果存在具有非空返回值但在其定义中不包含return语句的函数,是否有生成错误/警告的GCC/g++选项?例如:intadd(inta,intb){a+b;} 最佳答案 -Wreturn-type.它由-Wall(您应该始终与-Werror-Wextra一起运行)启用。 关于c++-GCC选项:warningonnon-voidfunctionswithoutareturnstatement,我们在StackOverflow上找到一个类似的问题: https:

c++ - "Return value optimization"会导致未定义的行为吗?

阅读this一位回复者指出的维基百科文章针对以下问题:C++Copyconstructor,temporariesandcopysemantics我遇到了这条线Dependingonthecompiler,andthecompiler'ssettings,theresultingprogrammaydisplayanyofthefollowingoutputs:这不符合未定义行为的条件吗?我知道这篇文章说Dependingonthecompilerandsettings但我只想清除它。 最佳答案 不,这不是未定义的行为。未定义的行为

C++ : Initializing base class constant static variable with different value in derived class?

我有一个带有常量静态变量a的基类A。我需要类B的实例对静态变量a具有不同的值。这怎么能实现,最好是静态初始化?classA{public:staticconstinta;};constintA::a=1;classB:publicA{//???//Howtoset*a*toavaluespecifictoinstancesofclassB?}; 最佳答案 你不能。所有派生类共享一个静态变量实例。 关于C++:Initializingbaseclassconstantstaticvaria