C++ 声明'const``boost::range`s的正确方法
使用C++ 声明'const``boost::range`s的正确方法,c++,boost,constants,boost-range,C++,Boost,Constants,Boost Range,使用boost::any_range时,指定不应修改底层容器(如果有)的正确方法是什么 例如,使用别名 模板 使用范围=boost::任意_范围; 若要声明无法修改基础容器或“数据源”内容的范围,是否应将其声明为 const Range myRange; 或作为 Range-myRange; ? 我怀疑第一个版本是正确的。但是,如果,例如,我应用了任何boost::adapters,是否保证保持容器的常量 编辑 显然,range\u迭代器元函数通过用const T而不是T声明范围来“推断
boost::any_range
时,指定不应修改底层容器(如果有)的正确方法是什么
例如,使用别名
模板
使用范围=boost::任意_范围;
若要声明无法修改基础容器或“数据源”内容的范围,是否应将其声明为
const Range myRange;
或作为
Range-myRange;
?
我怀疑第一个版本是正确的。但是,如果,例如,我应用了任何boost::adapters
,是否保证保持容器的常量
编辑
显然,range\u迭代器
元函数通过用const T
而不是T
声明范围来“推断”底层容器的const
属性。也就是说,range\u iterator:::type
是const\u iterator
(如果底层容器具有这样的成员类型),而不是iterator
,因此不能通过该迭代器修改容器
这是否意味着范围
也使用常量迭代器
遍历范围?显然,确保不修改值的正确方法与我提到的方法都不一样
从中,我们可以看到任何_范围
采用以下模板参数:
模板<
阶级价值
,类遍历
,课堂参考
,阶级差异
,class Buffer=任何迭代器\u默认\u缓冲区
>
在任何范围内分类;
我强烈怀疑声明“const range”的方法是将const T
指定为Reference
类型模板参数,尽管令人惊讶的是,我仍然无法在文档中找到任何明确的指示
因此常数范围可以声明为:
模板
使用ConstRange=boost::任意范围
显然,确保值不被修改的正确方法与我提到的方法都不一样
从中,我们可以看到任何_范围
采用以下模板参数:
模板<
阶级价值
,类遍历
,课堂参考
,阶级差异
,class Buffer=任何迭代器\u默认\u缓冲区
>
在任何范围内分类;
我强烈怀疑声明“const range”的方法是将const T
指定为Reference
类型模板参数,尽管令人惊讶的是,我仍然无法在文档中找到任何明确的指示
因此常数范围可以声明为:
模板
使用ConstRange=boost::任意范围
范围
和常量范围
是两件截然不同的事情。第一个(范围
)是常数T
的范围
。第二个(const Range
)是一个非常量T
的常量Range
。例如std::vector
和const std::vector
@Someprogrammerdude之间的区别是相同的,不同的是const Range
可能仍然能够修改底层容器,而Range
可能会推断const
属性(也就是说,使用范围迭代器
元函数中的常量迭代器
s而不是迭代器
s)。那么,常量范围
到底是什么?使用常量迭代器的迭代器
还是其“包装器”成员不改变(但底层容器可能)的迭代器
没有你想的那样做。看。@Oktalist是的,但那不是重点。我问的是常量范围
是否可以修改底层容器;我不是问如何基于范围
对象的常量
ness重载函数——原则上它可以独立于底层容器的const
ness。函数只是一个例子。我会澄清一下。@Someprogrammerdude:不过,你实际上不能生成std::vector
。Range
和const Range
是两个非常不同的东西。第一个(Range
)是常量t
的范围。第二个(const Range
)是一个常量Range
的非常量T
。例如std::vector
和const std::vector
@Someprogrammerdude之间的区别相同,除了const Range
可能仍然能够修改底层容器,而Range
可以推断const
的属性(也就是说,使用范围迭代器
元函数中的常量迭代器
s而不是迭代器
s)。那么,常量范围
到底是什么?使用常量迭代器的迭代器
还是其“包装器”成员不改变(但底层容器可能)的迭代器
没有你想的那样做。看。@Oktalist是的,但那不是重点。我问的是常量范围
是否可以修改底层容器;我不是问如何基于范围
对象的常量
ness重载函数——原则上它可以独立于底层容器的const
ness。这个函数只是一个例子。我会澄清一下。@Someprogrammerdude:不过,你实际上无法生成std::vector
。