草庐IT

-std=gnu99

全部标签

c++ - 为什么 std::thread 通过转发引用接受仿函数

为什么std::thread对象通过转发引用接受函数参数,然后使用decay_copy复制对象?只按值接受函数对象不是更容易吗?一般来说,为什么不对函数进行模板化以便按值获取函数对象?引用性不能用reference_wrapper来模仿吗(这会更明确,并且还方便地有一个成员operator()来调用存储的函数)? 最佳答案 Whydoesastd::threadobjectacceptthefunctionparameterbyforwardingreferenceandthenmakeacopyoftheobjectwithdec

c++ - 防止 gcc 中的 std::function 分配内存或增加阈值

有什么方法可以防止gcc中的std::function为较大的函数对象动态分配内存?我希望下面的代码可以在没有动态分配的情况下工作:#include#include//replaceoperatornewanddeletetologallocationsvoid*operatornew(std::size_tn){std::cout&stuff){returnstuff();}};intmain(){TestPlatetestor;testor.setValue(15);conststd::function&func=std::bind(&TestPlate::getValue,&te

c++ - 与 std::condition_variable 相比,使用 std::atomic 的方法 wrt 在 C++ 中暂停和恢复 std::thread

这是一个单独的问题,但与我之前提出的问题有关here我正在使用std::thread在我的C++不断轮询某些数据并将其添加到缓冲区的代码。我用C++lambda像这样启动线程:StartMyThread(){thread_running=true;the_thread=std::thread{[this]{while(thread_running){GetData();}}};}thread_running是一个atomic在类头中声明。这是我的GetData功能:GetData(){//Someheavylogic}接下来我还有一个StopMyThread我设置的功能thread_r

c++ - 使用什么类型的堆以及 c++ 中 std::priority_queue 的时间复杂度?

这个问题在这里已经有了答案:EfficiencyoftheSTLpriority_queue(6个答案)关闭6年前。我想知道什么我想问一下下面两个问题。C++中的std::priority_queue使用什么类型的堆?C++中std::priority_queue的top(),pop(),push()操作的时间复杂度是多少?我在网上查了,没找到答案。请告诉我答案。如果您不知道C++中的所有版本,请告诉我GCCC++11或C++14的答案。我为什么需要我想实现Dijkstra'sAlgorithm对于最短路径问题。令图中的顶点数=|V|,边数=|E|。使用BinaryHeap的时间复杂度

c++ - 在 g++ 中使用 std::variant

如何在g++中使用std::variant?为什么std::experimental中没有std::variant(虽然std::optional是)?我需要什么版本的g++?我不想使用boost,我只想使用标准库。编辑:似乎只有g++7支持std::variant。那么我的问题是:什么时候发布,使用它的实验版会遇到什么问题? 最佳答案 Thispage说,GCC7有std::variant。 关于c++-在g++中使用std::variant,我们在StackOverflow上找到一个

c++ - 为什么我的 swap<string,string> 比 std 版本慢得多?

这是我的C++代码:inlinestaticvoidswap(std::string&a1,std::string&a2){std::stringtemp(std::move(a1));a1=std::move(a2);a2=std::move(temp);}我运行此函数1000000次,平均耗时78毫秒,但std仅耗时13毫秒。刚刚看了下std::swap的实现,和我的差不多,为什么我的这么慢? 最佳答案 根据标准§21.3.2.8/p1swap[string.special](EmphasisMine):templatevoid

c++ - 如何正确地将所有权从原始指针移动到 std::unique_ptr?

我的做法是:classSomeClass{std::vector>myObjects;public:voidtakeOwnership(MyObject*nowItsReallyMyObject){myObjects.emplace_back(std::move(nowItsReallyMyObject));}};我做的每件事都正确吗?有没有更好的解决方案? 最佳答案 move是多余的。我自己,我会这样做:voidtakeOwnership(std::unique_ptrnowItsReallyMyObject){myObjects

c++ - 使用空字符串 ""创建 std::locale

问题是否使用空字符串构造std::locale以使用户首选的native语言环境成为标准的一部分?如果是,您能否指出明确说明这一点的来源?问题描述std::locale文档中的示例有这一行:std::wcout这暗示使用空字符串创建语言环境将返回用户首选的本地语言环境。快速谷歌搜索后,这个article还提到:Theemptystringtellssetlocaletousethelocalespecifiedbytheuserintheenvironment.但是,在查看documentation时对于std::locale构造函数,没有提及提供空字符串时的特殊情况。引用如下:3-4

c++ - 在更改文件描述符 1 以引用不同的文件后,我应该如何管理::std::cout?

我想做dup2(fd,1);close(fd);并让::std::cout写入新的fd1.如何重置::std::cout所以没有什么好笑的?例如,预先冲洗是否足够?或者还有更多事情要做?我也很好奇::std::cin的相同之处。如果您更改了它们在它们下面使用的文件描述符,是否有重置它们的标准机制?明确地说,我的目标基本上是将我自己的输入和输出重定向到其他地方。我不想让进程无意中在其父级的标准输出上打嗝或试图从其父级的标准输入中消耗任何东西。而且我再也不想碰我parent的标准输入或标准输出了。我想忘记它们曾经存在过。我尤其不想无意中将输出发送到我parent在不同文件描述符上使用的同一

c++ - 我可以在 C++ 中仅使用 std::atomic 而不使用 std::mutex 安全地跨线程共享变量吗?

我制作了一个在多核上计算素数的程序。(请忽略该算法并非完全有效,这里将数字0和1视为质数。目的只是练习使用线程。)变量taken(接下来要测试的数字)正在8个线程之间共享。问题是它可以由一个线程递增,紧接着由另一个线程递增,并在它已经递增两次(或更多次)时被它们读取,因此可以跳过一些值,这是一件坏事。我以为它可以通过使用std::atomic_uint作为变量类型来解决,但我显然错了。有什么方法可以在不需要使用std::mutex的情况下解决这个问题,因为我听说它会导致相当大的开销?源代码:#include#include#include#include#include#include