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