草庐IT

std-ranges

全部标签

c++ - 我可以安全地使用#ifdef 来了解是否包含 c++ std header 吗?

首先,我读过这个问题:Isthereawaytodetectportablythatastandardheaderisincludedusingmacros?我想知道的是:使用#ifdef检测是否包含c++stdheader的安全性如何,如下面的代码所示:namespaceoverwrite{usingbyte=unsignedchar;templatevoidwithZeros(generic*toBeOverwriten,size_tlength=1){//dostuff}#ifdef_GLIBCXX_RANDOM//foundthismacroinsidetemplatevoid

c++ - 为任意类型删除实现小缓冲区优化的简单方法(如在 std::function 中)。

我倾向于使用类型删除技术。它通常看起来像这样:classYetAnotherTypeErasure{public://interfaceredirectedtopImplprivate://Adaptingfunctiontemplate...friendYetAnotherTypeErasuremake_YetAnotherTypeErasure(...);classInterface{...};templateclassConcretefinal:publicInterface{//redirectingInterfacetoAdaptee};std::unique_ptrpImp

c++ - while (std::cin >> value) 如何工作?

在C++Primer中给出的示例中,#includeusingnamespacestd;intmain(){intsum=0,value=0;while(std::cin>>value){sum+=value;//equivalenttosum=sum+value}std::cout(std::cin>>value)如何返回true?什么是“文件结尾”?看来我必须理解该术语才能理解我的主要问题。谢谢! 最佳答案 overloadedoperator>>function返回对流本身的引用,流有anoverloadedoperator这

c++ - std::map operator [] - 未定义的行为?

我一直在思考以下问题:这是否会导致未定义的行为,为什么?std::mapm;m[10]+=1;它可以完美地编译和运行,但不能证明任何事情。它类似于一个常见的UB示例i=++i+i++;因为operator[]确实有副作用,但另一方面假设任何评估顺序(从左到右从右到左)将我带到map的相同最终状态附言可能相关:http://en.cppreference.com/w/cpp/language/eval_order编辑抱歉,我应该写的m[10]=m[10]+1; 最佳答案 没有什么是未定义的。operator[]返回映射条目的左值引用(

c++ - 为什么没有 std::from_string()?

为什么没有templateTstd::from_string(conststd::string&s);在C++标准中?(看看如何有一个std::to_string()函数,我的意思是。)PS-如果您对未被采纳/考虑的原因有任何想法,请回答/评论并说明原因,而不是投反对票。我实际上并没有提议将其包含在标准中。 最佳答案 正如NicolBolas所指出的,to_string从来都不是模板,而只是一组重载函数。制作这样的函数模板并不好,因为一般地做它们可能效率不高,而且只能表现得像字符串流。所以from_string同样不应该是函数模板,

c++ - 为什么 std::none_of 比手动循环更快?

我将std::none_of的性能与三种不同的手动实现进行了基准测试,使用i)for循环,ii)基于范围的for循环和iii)迭代器。令我惊讶的是,我发现虽然所有三个手动实现花费的时间大致相同,但std::none_of明显更快。我的问题是-为什么会这样?我使用了Google基准库并使用-std=c++14-O3编译。运行测试时,我将进程的亲和性限制为单个处理器。我使用GCC6.2得到以下结果:BenchmarkTimeCPUIterations--------------------------------------------------------benchmarkSTL288

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中有引用计数的原子增量。如果我们不再需