草庐IT

c++ - gcc 4.9.2 和 gcc 5.3 之间正则表达式支持的差异

谁能更熟悉gcc指出为什么下面的示例在gcc4.9.2上无法匹配但在gcc5.3上成功?有什么我可以做的来改变模式,以便它可以工作(在VS2013上似乎也能正常工作)?#include#includestd::regexpattern("HTTP/(\\d\\.\\d)\\s(\\d{3})\\s(.*)\\r\\n(([!#\\$%&\\*\\+\\-\\./a-zA-Z\\^_`\\|-]+\\:[^\\r]+\\r\\n)*)\\r\\n");constchar*test="HTTP/1.1200OK\r\nHost:192.168.1.72:8080\r\nContent-Le

c++ - std::atomic<uint_least8_t> 行为

在一个系统上:typedefunsignedcharuint8_t;typedefunsignedshortuint16_t;std::atomic::is_always_lock_free//=>falsestd::atomic::is_always_lock_free//=>true据我了解,类型std::atomic将是8位并且不是无锁的。如果是这样,如果我想要一个至少8位且始终无锁的原子类型,我应该怎么写?(假设存在这种类型)是否有比以下更好的选择:std::atomic::is_always_lock_free,uint8_t,uint16_t>::type>(为简单起见,我

c++ - 在 std::function 中存储不可复制但可移动的对象

假设我有一个不可复制但可移动的仿函数s,我如何将它存储在std::function中?即,如何编译以下代码?(使用gcc4.6)#include#includestructS{S()=default;S(Sconst&)=delete;S&operator=(Sconst&)=delete;S(S&&){}voidoperator()(){}};std::functionfunc;voidmake_func(){Ss;func=std::bind(std::move(s));//Thiswon'tcompile}intmain(){make_func();}

c++ - 为什么 std::sort 和 partial_sort 需要随机访问迭代器?

我想知道为什么c++标准要求std::sort应该只采用随机访问迭代器?我没有看到优势,因为std::sort和std::list::sort复杂度为N*log(N)。将std::sort限制为随机访问迭代器(RAI)似乎使得有必要为具有相同复杂性的列表编写单独的函数。这同样适用于partial_sort,其中列表的非RAI对应部分issimplymissing直到今天。这种设计是因为人们使用quick_sort的变体来实现std::sort吗?如果在RAI容器上编写排序算法有优势,是否最好使std::sort更通用,并让RAI容器像std::vector提供专门的v.sort?

c++ - 这是 std::get_time 中的错误吗?

我正在尝试解析日期时间字符串并将结果放入std::tm结构中。下面是代码,#include#include#include#includestd::stringstreamss;structstd::tmwhen;ss.str("8/14/20153:04:23PM");ss>>std::get_time(&when,"%m/%d/%Y%r");运行代码后,when.tm_hour为27。这是一个错误,还是我做错了什么?我在Windows7上使用VisualStudio2013。谢谢。 最佳答案 您在Microsoft的std::n

c++ - 为什么 std::(i)ostream 将有符号/无符号字符视为文本而不是整数?

这段代码没有做它应该做的事情:#include#includeintmain(){uint8_tsmall_integer;std::cin>>small_integer;std::cout原因很简单:uint8_t是unsignedchar的类型定义流将此类型视为文本:VisualC++2015实现templateinlinebasic_istream&operator>>(basic_istream&_Istr,unsignedchar&_Ch){//extractanunsignedcharreturn(_Istr>>(char&)_Ch);}还有一个类似的代码转换为char对于

c++ - 使用 C 样式字符串文字与构造未命名的 std::string 对象的默认建议?

因此,C++14引入了许多要使用的用户定义文字,其中之一是"s"literalsuffix,用于创建std::string对象。根据文档,其行为与构建std::string完全相同。对象,像这样:autostr="HelloWorld!"s;//RHSisequivalentto:std::string{"HelloWorld!"}当然构建一个未命名的std::string对象可以在C++14之前完成,但是因为C++14的方式要简单得多,我认为更多的人实际上会考虑构建std::string现场的物体比以前多,这就是为什么我认为提出这个问题是有道理的。所以我的问题很简单:在什么情况下,构

C++ 线程间通信

我有几个类,每个类在不同的线程中打开不同的程序,并使用CreateProcess执行/保存有关它的信息(如果有更多面向C++的方法来执行此操作,请告诉我——我看了)。一些类依赖于其他正在运行的程序之一。即,如果A停止,B必须停止。我刚才写了这段代码,然后我的解决方案是有一个带有静态函数的类,它运行各种程序和静态成员变量来保存它们的“状态”。我还使用了CreateThread。回过头来看,这种方法似乎……脆弱且笨拙。我不知道使用这样的“静态类”是否是好的做法(尤其是记忆一下初始化状态成员变量是多么尴尬)。我可能想让每个类都包含自己的运行函数。但是,我正在考虑的问题是,如果A笨拙地停下来,

c++ - 为什么没有 std::inplace_merge 是唯一的?

我试图寻找一种算法来执行std::inplace_merge的操作其次是std::unique会做。似乎在1次通过中比在2次中更有效。无法在标准库中或通过oogling找到它。那么在boost的某个地方是否有不同名称的实现?这样的算法是否可行(从某种意义上说,它具有与普通inplace_merge相同的复杂性保证)? 最佳答案 它不就地运行,但假设事先两个范围都不包含重复项,std::set_union将找到与合并后跟唯一相同的结果。 关于c++-为什么没有std::inplace_me

c++ - 为什么在返回兼容类型时需要显式 std::move?

我正在看STL的“Don’tHelptheCompiler”演讲,他在幻灯片26上有一个类似的例子:structA{A()=default;A(constA&){std::coutget_pair(){std::pairp;returnp;}std::tupleget_tuple(){std::pairp;returnp;}std::tupleget_tuple_moved(){std::pairp;returnstd::move(p);}有了这个,下面的调用:get_pair();get_tuple();get_tuple_moved();产生这个输出:movedmovedcopie