草庐IT

c++ - 是否有标准名称(模板或宏)来替换 ARRAY_SIZE、_countof 等?

我不是在谈论std::array或任何东西,只是经典的VanillaC/C++数组。我知道可以实现ARRAY_SIZE/_countof的各种方式,我只是想知道他们是否已经设法为此标准化了一个名称(在std::我假设)。如果没有,是否有相关建议? 最佳答案 当前的解决方法std::extent-数组的大小如果您正在使用native数组,您可以使用std::extent来自,用于生成数组的Nth维(默认为第一个)中的元素数。inta1[1024];inta2[std::extent::value];//int[1024]一点间接(通用

c++ - std::initializer_list 类型推导

最近写了一个很简单的类。classC{public:voidAddString(std::initializer_list>x){//irrelevant}};intmain(){Cc;c.AddString({{"1",1},{"2",2},{"3",3}});....//otherunimportantstuffreturn0;}令我惊喜的是,它编译并正常工作。有人可以向我解释一下编译器是如何推断出嵌套的大括号初始值设定项是用于std::pair的吗?我正在使用MSVS2013。 最佳答案 c.AddString({{"1",1

c++ - 将 std::ptr_fun 用于成员函数

考虑以下几点:classA{public:boolis_odd(inti){return(i%2)!=0;}voidfun(){std::vectorv2;v2.push_back(4);v2.push_back(5);v2.push_back(6);//failsherev2.erase(std::remove_if(v2.begin(),v2.end(),std::not1(std::ptr_fun(is_odd))),v2.end());}};上面的代码无法否定is_odd()的效果,因为它是一个成员函数。对std::ptr_fun()的调用失败。我如何让它发挥作用?请注意,我希

C# Task.Run() 与 C++ std::async()

我在我的Mac上运行2个相似的代码示例,一个是C++,另一个是C#。2个并行执行的简单任务(或者至少我希望它们这样做),一个在循环中打印“+”,另一个在循环中打印“-”。我原以为2个样本的输出非常相似,但出乎我的意料,它们有很大的不同。C++似乎真正并行地运行任务。我可以在每次运行时看到+-很好地交替,但C#似乎运行一个任务一段时间,然后切换到另一个任务并运行一段时间。像这样:C++:+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+C#:++++++++++---------++++++------我知道不能对并行线程的运行方式做出假设,我很好奇C++始终如一地产生如此好

c++ - 在 Ubuntu 16.04 下构建 Proxygen

我想使用Ubuntu16.04从github构建Facebook的Proxygenc++http库。这是我设置的环境以及用于安装依赖项的deps.sh命令:gcc--versiongcc(Ubuntu5.4.0-6ubuntu1~16.04.1)5.4.020160609exportCPPFLAGS="-std=c++14"exportCXXFLAGS="-std=c++14"gitclonegit@github.com:facebook/proxygen.gitcdproxygen/proxygen&&./deps.sh这让我完成了构建其愚蠢依赖的大部分工作,但我遇到了一个不完整的类

c++ - 使用/std :c++latest (or C++17/N4190) 使用 MSVC2015 编译 boost

当我尝试使用带有/std:c++latest标志的MSVC2015构建boost时,出现错误:boost\algorithm\string\detail\case_conv.hpp(33):errorC2143:syntaxerror:missing','before'指向://atolowerfunctortemplatestructto_lowerF:publicstd::unary_function现在这似乎是由于此处提到的N4190:https://www.visualstudio.com/en-us/news/releasenotes/vs2015-update3-vs/st

c++ - 为什么 std::reference_wrapper 不是默认可构造的?

我觉得防止std::reference_wrapper默认构造使其更难使用,即使使用默认构造的reference_wrapper会导致运行时异常。然而,一个reference_wrapper是完全可复制的,因此它的值始终可以更改,那么为什么要阻止它默认具有the空引用?它使许多用例变得更加简单,并且有了它,建议的observer_ptr不再需要-为什么需要冗余?默认构造reference_wrapper会统治他们!想法? 最佳答案 However,areference_wrapperisperfectlycopyable,soit'

c++ - 面对抛出移动构造函数/赋值运算符,std::vector::emplace() 是否真的提供了强大的异常保证?

Accordingtocppreference.com,std::vector::emplace()无条件提供强异常保证:Ifanexceptionisthrown(e.g.bytheconstructor),thecontainerisleftunmodified,asifthisfunctionwasnevercalled(strongexceptionguarantee).但是,在GCC7.1.1的实践中似乎并非如此。以下程序:#include#includestructugly{inti;ugly(inti):i{i}{}ugly(constugly&other)=defaul

c++ - std::map 是否分配它的比较器?

std::map是否需要复制赋值(样式为map1=map2;)以将map2的比较器复制到map1?我已经测试过实际的实现是这样的。我对它在C++标准中的指定位置更感兴趣。 最佳答案 如果我们查看[associative.reqmts]/12,我们有Whenanassociativecontainerisconstructedbypassingacomparisonobjectthecontainershallnotstoreapointerorreferencetothepassedobject,evenifthatobjectis

c++ - 获取位于特定区间内的已排序值列表的子列表的最短方法

今天我在问自己,获取排序vector中所有值的最短代码可能是什么std::vector,大于或等于a小于或等于b.我的第一种方法类似于以下内容:#include#include#include#include//ReturnsallvaluesinsortedValuesbeinggreaterequalstartandsmallerequalend;std::vectorcutValues(conststd::vector&sortedValues,doublestart,doubleend){std::vectorret;autostartIter=std::lower_bound