草庐IT

-std=gnu99

全部标签

c++ - 为什么 const 右值限定的 std::optional::value() 返回一个 const 右值引用?

std::optional::value()有以下两个重载constexprT&value()&;constexprconstT&value()const&;constexprT&&value()&&;constexprconstT&&value()const&&;返回const右值引用有什么意义?我能想到的唯一原因是让编译器能够帮助捕获以下(真的很奇怪)情况下的未定义行为autor=std::cref(const_cast&&>(std::optional{}).value());如果std::optional::value()返回了一个constT&,那么上面的代码将编译并在时导致

c++ - 理解 std::map::find

我正在尝试学习如何将std::map与函数一起使用。我对std::map::find在这方面的工作方式有点困惑。这是一个简单的代码,其中我将Lambda函数与map一起使用。autoLambda=[](constint&a,constint&b){coutexpt(Lambda);expt[1]=2;expt[10]=12;autosearch1=expt.find(1);autosearch10=expt.find(10);if(search1!=expt.end()){std::coutfirstsecond这是我得到的输出:InsidelambdaInsidelambdaInsi

c++ - 为什么 `std::pmr::polymorphic_allocator` 不会在容器移动时传播?

来自http://en.cppreference.com/w/cpp/memory/polymorphic_allocator:polymorphic_allocatordoesnotpropagateoncontainercopyassignment,moveassignment,orswap.Asaresult,moveassignmentofapolymorphic_allocator-usingcontainercanthrow,andswappingtwopolymorphic_allocator-usingcontainerswhoseallocatorsdonotcomp

c++ - 将 std::deque 内容复制到字节数组的最有效方法

是否有更好的方法将std::deque的内容复制到字节数组中?看起来STL中应该有一些东西可以做到这一点。//Generatebyte-arraytotransmituint8_t*i2c_message=newuint8_t[_tx.size()];if(!i2c_message){errno=ENOMEM;::perror("ERROR:FirmataI2c::endTransmission-Failedtoallocatememory!");}else{size_ti=0;//Loadbyte-arrayfor(constauto&data_byte:_tx){i2c_messa

c++ - 标准库中是否有与 Rust 的 `std::mem::drop` 等效的 C++?

函数std::mem::drop在Rust中move它的参数,然后通过超出范围来销毁它。我在C++中编写类似函数的尝试如下所示:template::value>>voiddrop(T&&x){T(std::move(x));}标准库中是否已经存在这样的函数?编辑:该函数可用于在超出范围之前调用对象的析构函数。考虑一个类,它在文件句柄被销毁后立即关闭,但不会更早。为了论证,假设ofstream没有close方法。你可以这样写:ofstreamf("out");f 最佳答案 C++的标准库没有这样的函数。但是,您可以使用此成语实现相同的

c++ - std::future 如何影响关联的 std::packaged_task 的生命周期?

我有一个std::packaged_task包含一个通过复制捕获变量的lambda。当这个std::packaged_task被删除时,我希望lambda中的变量被破坏,但我注意到如果我得到相关的std::future这个std::packaged_task,future对象延长了lambda内部变量的生命周期。例如:#include#includeclassDummy{public:Dummy(){std::cout*p_task;{DummyScopedDummy;p_task=newstd::packaged_task([ScopedDummy](){std::coutfutur

c++ - 如何将 std::string 拆分为 std::string_views 的范围 (v3)?

我需要在所有空格处拆分一个std::string。然而,结果范围应该将其元素转换为std::string_view。我正在为范围的“元素类型”而苦苦挣扎。我猜,类型类似于c_str。如何将“拆分”部分转换为string_view?#include#include#include"range/v3/all.hpp"intmain(){std::strings="thisshouldbesplitintostring_views";autoview=s|ranges::view::split('')|ranges::view::transform(std::string_view);}

c++ - 在基于范围的 for 循环中使用 shared_ptr 到 std::vector

我编写了一个c++函数,它组装一些数据,然后将std::shared_ptr返回到新分配的包含数据的std::vector。类似于此的内容:std::shared_ptr>shared_ptr_to_std_vector_of_ints(){autov=std::make_shared>();for(inti=0;ipush_back(i);returnv;}我尝试使用基于范围的for循环遍历vector的内容,但它表现得好像vector是空的。在摆弄之后,我发现我可以通过将从函数返回的值分配给局部变量,然后在循环中引用它来让它按照我的预期运行://Executesloopzeroti

c++ - 返回对齐内存是否需要 std::make_unique<T[]> ?

是唯一指针array_ptr拥有的内存:autoarray_ptr=std::make_unique(size);对齐到sizeof(double)alignof(double)边界(即,std是否要求正确对齐)?数组的第一个元素是缓存行的第一个元素吗?否则:在C++14中实现此目的的正确方法是什么?动机(更新):我计划在数组上使用SIMD指令,并且由于缓存行是我所知道的每个架构上的基本内存单元,所以我宁愿正确分配内存,以便array位于缓存行的开头。请注意,只要元素正确对齐(独立于缓存行之间元素的位置),SIMD指令就可以工作。但是,我不知道这是否有影响,但我猜是的,有影响。此外,我

c++ - Boost 多索引容器与基于 std::unordered_map( map 的 map )的多级映射容器

我最近发现了boost::multi_index_container,我很好奇他的性能与我自己实现的基于多级映射的类似容器的比较,定义为:typedefintData;typedefuint64_tMainKey;typedefuint64_tSecondaryKey;typedefstd::unordered_mapSecondaryMap;typedefstd::unordered_mapPrimaryMap;键的顺序并不重要。快速查找很重要,为此我使用了类似的东西://findprimaryKey=10andsecondaryKey=30PrimaryMapm;....autoi