草庐IT

c++ - 如何在 constexpr string_view 上使用 std::string_view::remove_prefix()

std::string_view::remove_prefix()和std::string_view::remove_suffix()都是c中的constexpr成员函数++17;但是,它们会修改调用它们的变量。如果值是constexpr,它也将是const并且不能修改,那么这些函数如何用于constexpr值?换句话说:constexprstd::string_viewa="asdf";a.remove_prefix(2);//compileerror-aisconst如何在constexprstd::string_view上使用这些函数?如果它们不能在constexprstd::s

c++ - C++ 中 "import std;"的用途

我在cppdepend上看到了以下一小段代码地点。importstd;//Moduleimportdirective.intmain(){std::cout那么,C++中importstd;的目的是什么?如何在C++中使用importstd;而不是usingnamespacestd;?我尝试在G++编译器中编译程序,但出现错误。 最佳答案 So,Whatisthepurposeofimportstd;C++?它的目的是使std模块中的名称可用。模块是一种语言功能,已被提议包含在未来的C++标准中。Howtouseimportstd;

c++ - 有没有标准的方法来替换 C 风格的 bool 数组?

在这段代码中voidlegacyFunction(intlength,bool*bitset){//stuff,lotsofstuff}intmain(){intsomenumber=6;//somenumberissettosomevalueherebool*isBitXSet=newbool[somenumber];//initialisationofisBitXSet.legacyFunction(somenumber,isBitXSet);delete[]isBitXSet;return0;}我想替换bool*isBitXSet=newbool[somenumber];通过类似

c++ - 使用 std::for_each 遍历树

我对使用algorithm还很陌生和functional在C++中。我需要进行树遍历并为每个元素执行一个函数。请参阅下面的代码。这行得通,但我有一些我不喜欢的东西,也许可以做得更好。请注意,我仅限于相当旧的g++(4.4.7)版本,无法使用lambda函数。我使用包装函数do_walk和std::bind调用成员函数walk在每个元素上。有没有办法避开包装函数,直接调用成员函数?我为回调函数使用了typedefUnaryFunction.我更愿意使用walk的模板化版本.但是,当我更改代码以使用模板时,出现以下编译错误:error:nomatchingfunctionforcallto

c++ - std::any 的存储对象类型的可能性

在c++17中我们有std::any它将可变类型的对象存储在内存中。好的部分是我可以创建一个std::anyvector来模拟任意类型对象的容器。每当从容器中查询对象时,都会使用std::any_cast调用时使用完全相同的类型std::make_any创建任何对象。这是我如何实现这一目标的片段#include#include#include#include#includeintmain(){/*createsomeobjects*/std::setmySet={1,2,3};std::vectormyVec={3,4,5};std::unordered_map>myHash={std

c++ - 在可变参数模板中实现 STL 函数

我一直在做一个小项目来跟上可变参数模板的速度。我实现了一个小的多维数组。我现在想定义一个对给定位置的最近邻居进行操作的函数——是否有一种优雅的方法来检索数组中给定位置的邻居的值?templatestructMArr{typedefstd::array::type,size>type;std::array,size>data;MArr&operator[](inti){returndata[i];}};templatestructMArr{typedefstd::arraytype;typedata;T&operator[](inti){returndata[i];}};附录:我有点清楚

c++ - MSVC std::pair 实现:SFINAE 是否在此处正确应用?

考虑以下std::pair的代码MicrosoftVisualStudio15.4.5附带的STL实现的默认构造函数:template::value&&is_default_constructible::value>>constexprpair():first(),second(){//defaultconstruct}我设置了/std:c++latest选项,所以,根据标准(我在这里使用草案n4659)我希望如果_Ty1中的任何一个,这个构造函数将被排除在重载决议之外。或_Ty1不是默认可构造的:23.4.2Classtemplatepair[pairs.pair]EXPLICITc

c++ - 为什么 C++ 用零初始化 std::vector 而不是 std::array?

当你不想要它时,用零初始化一个vector不是浪费时间吗?我试试这段代码:#include#include#include#defineSIZE10intmain(){#ifdefVECTORstd::vectorarr(SIZE);#elsestd::arrayarr;#endif//VECTORfor(unsignedn:arr)printf("%i",n);printf("\n");return0;}我得到了输出:用vector$g++-std=c++11-DVECTORtest.cpp-otest&&./test0000000000用数组g++-std=c++11test.cp

c++ - C 风格数组与库接口(interface)的 std::array

我想编写一个带有提供读取功能的接口(interface)的库。C风格的数组容易出错,但允许传递任何大小的缓冲区。C++数组更安全,但强制使用大小来构造。//interface.h//C-stylearrayintread(std::uint8_t*buf,size_tlen);//C++arrayintread(std::array&buff)我怎样才能两全其美?我在考虑函数模板,但它对于库接口(interface)来说似乎不实用。templateintread(std::array&buf);编辑std::vector可能是一个很好的候选人,但如果我们考虑到char*和std::ar

c++ - 为什么没有类似于 std::string_view 的 view<T>

我知道std::string_view是对字符串的非拥有引用和std::string_view之间的主要区别和std::string是现在,为什么std::string_view不适用于其他类型?或者为什么这个实现只针对std::string?例如:如果我们有类似的generic_view其中T可以是任何类型,包括自定义类型。有了这个,而不是使用constT&作为函数参数,generic_view可以使用。以及std::string_view的其他优势将很有用,如分配、复制等。 最佳答案 C++20中有一个非拥有类型,用于任意对象的