草庐IT

const_iterators

全部标签

c++ - 在 C++ 的元编程中保护从非 const-volatile 类型到 const-volatile 的赋值的正确方法是什么?

例如我有一个函数可以实现null_ortemplateautonull_or(T*p,U*default_value)->typenamestd::enable_if::type,typenamestd::decay::type>::value,T*>::type{if(p){returnp;}else{returndefault_value;}}仅使用std::decay将启用const/volatiletype*default_value分配给non-const/non-volatiletype*p.避免它的最佳方法是什么?此外,像typedefault_value[100]这样的

c++ - std::shared_ptr<std::string const> 能否作为引用计数不可变字符串的有效实现?

理想情况下,不可变字符串类只需要为每个字符串分配一个内存。甚至引用计数也可以存储在与字符串本身相同的内存块中。string的简单实现和shared_ptr将为shared_ptr分配三block不同的内存:字符串缓冲区的内存字符串对象的内存引用计数的内存现在,我知道在使用std::make_shared()时,智能实现可以将最后两个组合成一个分配。但这仍然会留下两个分配。当您知道字符串是不可变的时,字符串缓冲区将不会被重新分配,因此应该可以将它与字符串对象集成在一起,只留下一次分配。我知道一些字符串实现已经对短字符串使用了这样的优化,但我正在寻找一个不管字符串长度如何都这样做的实现。我

c++ - 将 `hana::string` 转换为 `constexpr const char (&)[]`

我有一些旧代码使用了与str_const非常相似的东西描述here和here做一些constexpr字符串操作。str_const是ScottSchurr描述的文字类型,可以从字符串文字构造,因为它具有来自constchar(&)[]的模板构造函数.我现在也有一些使用boost::hana的新代码.我希望能够参加hana::string并创建一个str_const那是指它。最简单的方法是转换hana::string到constexprconstchar(&)[].(实际上,在这一点上这不是最简单的方法,最简单的方法肯定是在我的str_const实现中添加一个新的模板构造函数。但在这一点

c++ - 在类声明中初始化 const 成员变量时 Debug模式下的异常

#include#include#include#includeclassX{public:X(){std::cout>ValidatorType;constValidatorTypem_validators=ValidatorType{{"some-string",[](){//validationcodestd::cout以上代码使用Xcode7.2.1和Clang7.0.2在OSX上以调试和Release模式成功构建和运行。它还使用VisualStudioExpress2013forWindowsDesktop在Windows7上以Release模式成功构建和运行。但是,在Win

c++ - const、span 和迭代器问题

我尝试编写一个迭代器,通过索引遍历容器。It和一个constIt两者都允许更改容器的内容。Const_it和一个constConst_it两者都禁止改变容器的内容。在那之后,我尝试写一个span在一个容器上。对于类型T这不是const,两者都是constspan和span允许更改容器的内容。两者constspan和span禁止改变容器的内容。代码无法编译,因为://*thisisconstwithinaconstmethod//ButItrequiresanon-const*thishere.//SothecodedoesnotcompileItbegin()const{returnI

c++ - 避免接受 lambda 的方法的 const/non-const 重复

classFrame表示像素类型为P的图像.由于底层数据缓冲区格式的多种灵active,遍历其像素的算法并非易事。template//Pispixeltype;RM=is_row_majorclassFrame{//...templatevoiditerate(Ff){//iterateinawaythatisperformantforthisbufferif(stride==(RM?size.w:size.h)){auton=size.area();for(index_tk=0;k(stride)*(RM?size.h:size.w);for(index_tk0=0;k0我希望能够同

c++ - boost 图形库 : Bundled Properties and iterating across edges

只是想了解一下BoostGraphLibrary,我有几个问题。我正在编写一些代码,它是BGL图的包装类。我的想法是,我可以随心所欲地操作图表,然后调用包装方法以GEXF(XML)格式输出图表。我的代码是这样的:structVertex{std::stringlabel;...};structEdge{std::stringlabel;doubleweight;...};typedefboost::adjacency_listGraphType;templateclassGEXF{private:Graphgraph;...};templatevoidGEXF::buildXML(){

c++ - 需要帮助调试从 const char* 到 char* [-fpermissive] 的无效转换

我是c++的新手,不知道为什么会这样......第105行我收到此错误从constchar*到char*的无效转换[-fpermissive]第113行我收到从âconstchar*到char*[-fpermissive]的无效转换错误#include#include#includeusingnamespacestd;characWordWrap[1024];characPrint[1024];BasicConsole::BasicConsole(char*szName):ZFSubSystem(szName){m_iMaxWidth=50;//TEXT_MAX_LENGHT;m_bL

c++ - 具有不完整 Value 参数的 Boost.Iterator Facade

我正在尝试将boost::iterator_facade与不完整的Value一起使用模板参数。这失败了,因为iterator_facade正试图检查类型is_pod。这是预期的行为吗?我可以解决这个限制吗某种方式?我可以编写一个简单地代理foo和为它提供隐式转换,但我宁愿有一个更简单的解决方案。#includeclassiter:publicboost::iterator_facade{private:friendclassboost::iterator_core_access;voidincrement(){}boolequal(iterconst&other)const{retur

c++ - 在自定义 const native C++ 容器类上支持 "for each"

我想实现一个简单的nativeC++固定容量数组模板类,为了方便起见支持基于范围的“foreach”语法,开销最小。我在const实例上支持它时遇到问题。有了这个实现:templateclassList{public:List(){mSize=0;}constT*begin()const{returnmItems;}constT*end()const{returnmItems+mSize;}T*begin(){returnmItems;}T*end(){returnmItems+mSize;}private:size_tmSize;TmItems[Capacity];};和这种用法:c