草庐IT

-std=gnu99

全部标签

c++ - std::condition_variables 可以用作计数信号量吗?

这是CanC++11condition_variablesbeusedtosynchronizeprocesses?的后续行动.std::condition_variable对象可以用作计数信号量吗?我认为不是因为对象似乎绑定(bind)到std::mutex,这意味着它只能用作二进制信号量。我在网上看过,包括here,here,和here,但找不到将这些对象用作计数信号量的引用或示例。 最佳答案 是的。structcounting_sem{counting_sem(std::ptrdiff_tinit=0):count(init)

c++ - std::round 不是 std on android 的成员

我在为Android和iOS构建的Qt应用程序上使用来自C++11的std::round。但是在android上,我得到的错误是std::round不是std的成员尽管包含cmathheader。如何让std::round在android上工作?是否有std::round的替代方案?以下是我的android环境:ANDROID_NDK_PLATFORM=android-23NDKversion=r13bANDROID_NDK_TOOLCHAIN_VERSION=4.9 最佳答案 Android-NDK中似乎缺少cmathheader

c++ - std::sort by unary 映射

C++标准库提供了将比较器传递给std::sort的功能.但是,我的代码中有很多情况需要对T的列表进行排序。函数对象f.像这样的比较器将是一个有效的选择:boolcompare(constT&a,constT&b){returnf(a)虽然这不是最优的。f评估速度很慢,但每次使用相同的T调用都会返回相同的值目的。所以我宁愿做的是计算f对范围内的每个对象一次,然后使用这些结果对它们进行排序。我的目标是编写这个函数(我没能做到):templatevoidsort(IterTleft,IterTright,Transformationf){/*?*/}在这次通话之后,f(*iter)对于所有

c++ - std::move into static_pointer_cast:为什么 static_pointer_cast 没有右值引用重载?

假设我们有一个函数需要一个按值共享的指针。(在现实生活中的例子中,我通过右值引用获取它并将其转发给成员。)voidf(std::shared_ptrptr){...}但是我们只有一个指向基类的共享指针,所以我们使用static_pointer_cast:std::shared_ptrptr=std::make_shared();f(std::static_pointer_cast(ptr));第一个赋值(从临时构造ptr)是否触发了引用计数的原子递增和递减,或者共享指针是否被移动?(请注意,它正在向上转换。)在static_pointer_cast中有引用计数的原子增量。如果我们不再需

c++ - 如何使用 -std=c++17(可选、任意、string_view、变体)在 g++ 6.2.0 中包含 C++ 17 header

std::optional在C++17中,它是std::experimental::optional之前。我尝试编译一个包含的文件,使用命令:g++-std=c++17.cpp(在Bash终端中)。我收到以下错误:.cpp:5:20fatalerror:optional:Nosuchfileordirectory#include^compilationterminated但我可以#include就好了。我是否缺少一些头文件?如何包含optional标题?我也不能包含,或,得到同样的错误。 最佳答案 你不能。GCC6.2'ssuppo

c++ - 为什么遍历比合并两个排序的 std::list 更耗时?

令我惊讶的是,遍历比合并两个已排序的std::list花费的时间多12%。由于合并可以被认为和实现为连续的元素比较、列表拼接和迭代器遍历两个分离的排序链表。因此,遍历不应比合并它们慢,尤其是当两个列表足够大时,因为迭代元素的比例正在增加。但是,结果好像和我想的不符,我是这样验证上面的想法的:std::listlist1,list2;for(intcnt=0;cntdiff=std::chrono::system_clock::now()-start;std::cout附言。icc足够聪明,可以消除选项2。尝试sum+=num;并打印出sum。这是perf的输出:(测量的时间在不使用pe

c++ - 传递给 std::for_each 的函数是否允许复制序列元素?

我最近偶然发现了cppreference中的这个措辞:Unliketherestofthealgorithms,for_eachisnotallowedtomakecopiesoftheelementsinthesequenceeveniftheyaretriviallycopyable.这个说法对吗?我没有在标准中找到任何依据。我是否理解得很好,它会顺便说一句。暗示来自同一页面的以下示例无效?structSum{Sum():sum{0}{}voidoperator()(intn){sum+=n;}intsum;};intmain(){std::vectornums{3,4,2,8,1

c++ - 使用 c++ 11 constexpr 进行 std::map 初始化

我想用constexpr键初始化一个std::map。考虑以下C++11MWE:#includeusingstd::map;constexprunsignedintstr2int(constchar*str,constinth=0){return!str[h]?5381:(str2int(str,h+1)*33)^str[h];}constmapvalues={{str2int("foo"),"bar"},{str2int("hello"),"world"}};intmain(){return0;}当代码编译最近的clang和gcc时,生成的二进制文件将包含key类型的字符串:为什么k

c++ - 没有 ExecutionPolicy 的 std::transform 或 std::generate 可以并行吗?

在C++17中引入了并行标准算法(使用ExecutionPolicy参数重载),其中定义了执行顺序、交错和并行化的严格规则,例如([algorithm.parallel.exec/3]):Theinvocationsofelementaccessfunctionsinparallelalgorithmsinvokedwithanexecutionpolicyobjectoftypeexecution::sequenced_policyalloccurinthecallingthreadofexecution.[Note:Theinvocationsarenotinterleaved;s

c++ - 优化 std::visit 可能吗?

在使用std::visit时/std::variant我在探查器输出中看到std::__detail::__variant::__gen_vtable_impl函数花费的时间最多。我做了这样的测试://3classfamilies,alllikethisclassElementDerivedN:publicElementBase{...std::variantGetVariant()override{returnthis;}}std::vectorelements;std::vectorvisitors;std::vectorthirds;//prepareahacktogetdyna