草庐IT

const_iterators

全部标签

c++ - boost any_range 性能:std::prev(iterator) 与 --iterator

我最近开始喜欢免费功能std::next和std::prev显式复制和递增/递减迭代器。现在,我在一个非常具体的案例中看到了奇怪的行为,如果能帮助揭开它的神秘面纱,我将不胜感激。我有一个在boost::any_range上运行的内插/外推函数一些X_type.范围类型的完整定义是:boost::any_rangeany_range,在这种特殊情况下,是从iterator_range分配的持有指向constX_type的两个指针,作为X_type大约一半的Viewdata()面积vector.在MSVC2010中编译我的应用程序,一切正常。在MinGWg++4.7.0中编译相同的代码,它

c++ - 为什么 const temporary 选择调用非 const 成员函数而不是 const 成员函数?

这个问题在这里已经有了答案:Consttemporaryfromtemplatetypeandwhyusestd::add_const?(2个答案)关闭9年前。示例代码取自:http://en.cppreference.com/w/cpp/types/add_cv(我稍微修改了一下。)structfoo{voidm(){std::coutvoidcall_m(){T().m();}intmain(){call_m();call_m();//here}输出是:Non-cvNon-cv在第二次调用中,T是const限定的,所以T()应该调用const版本,对吗?还是我错过了一些特殊规则?

c++ - 强制转换为模板中的引用似乎抛弃了 const-ness

考虑以下C++代码:typedefstd::string&mutable_string_ref;conststd::stringstr="abc";mutable_string_refref(str);这显然会导致编译器错误,因为您无法创建对常量字符串的可变引用。对于GCC4.7.2,产生的错误是:error:invalidinitializationofreferenceoftype‘mutable_string_ref{akastd::basic_string&}’fromexpressionoftype‘conststring{akaconststd::basic_string}

c++ - 模板代码中的转发引用与 const 左值引用

我最近一直在研究C++中的转发引用,下面是我目前对该概念的理解的快速总结。假设我有一个模板函数foo对T类型的单个参数进行转发引用.templatevoidfoo(T&&arg);如果我用左值调用这个函数,那么T将被推断为T&制作arg参数类型为T&由于引用折叠规则T&&&->T&.如果使用未命名的临时函数调用此函数,例如函数调用的结果,则T将被推断为T制作arg参数类型为T&&.内部foo然而,arg是一个命名参数,所以我需要使用std::forward如果我想将参数传递给其他函数并仍然保持其值类别。templatevoidfoo(T&&arg){bar(std::forward(a

c++ - 重载 const 和非 const 转换运算符返回数组类型时出现 MSVC 错误 C2593

最近,我尝试使用转换运算符来替代operator[]。喜欢下面的代码:#includeclassfoo{public:usingtype=int[1];public:operatortype&(){returndata;}operatortypeconst&()const{returndata;}private:typedata;};intmain(){foof;f[0]=1;//errorhappensherestd::cout我发现它适用于G++但不适用于MSVCv141(2017)。MSVC报告:errorC2593:'operator['isambiguousnote:coul

c++ - const_iterator<T> 和 iterator<const T> 有什么区别?

假设我正在实现一个集合,比如std::vector.我需要实现iterator和const_iterator,但一旦我做了iterator可以const_iterator不只是实现为iterator(其中T是集合中包含的类型)?肯定有一些原因导致这行不通,因为关于如何在实现iterator时重用代码存在一百万个问题。和const_iterator但他们都没有说“只需使用constT作为类型”。 最佳答案 std::iterator_traits::value_type应该是T对于const_iterator,但是constT1表示i

c++ - 使用 boost::iterator_facade 的优点和缺点是什么?

是的——标题几乎概括了它。我有很多实现迭代器概念的类型,我想知道是否值得引入这个boostheader而不是手动实现。到目前为止:优势明确说明不太可能有错误 最佳答案 如果维护您自己的迭代器类型成为一种负担,那么请改用boost。它们经过详细说明和测试,不太可能出现错误。 关于c++-使用boost::iterator_facade的优点和缺点是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/

c++ - 这是 const_cast 未定义的行为吗?

我想知道以下是否是未定义的行为//Case1:int*p=0;intconst*q=*const_cast(&p);//Case2:(Ithinkthisisthesame)int*p=0;intconst*const*pp=&p;intconst*q=*pp;读取int*是否是未定义的行为,就好像它是intconst*一样?我认为这是未定义的行为,但我以前认为通常只添加const是安全的,所以我不确定。 最佳答案 资格方面,没问题。将每个表达式拆分为一个语句:int*p=0;//okint**addrp=&p;//okintcon

php - 为什么 PHP 不像 C++ 那样具有属性 'const'?

为什么PHP没有道德上等同于C++const?我认为这是PHP语言所缺乏的。有没有办法模拟与const对象或参数相同的属性? 最佳答案 C#也不做const事情,它是一种非常通用的语言。我是const的忠实粉丝,但我明白为什么脚本语言中的脚本往往不使用它们:脚本语言非常适合“裸奔穿过树林”,因为它“有趣”,并且可以非常快速地添加新功能,因为您没有强制执行严格的类型正确性,包括const。Perl、Python和Ruby使用标量是有原因的,传递/返回数组也是有原因的,因为最初“增长”系统非常容易。添加类型正确性(包括使用const)可

c++ - 为什么我不能使类内初始化 `const const std::string` 成为静态成员

我有以下工作代码:#include#includeclassA{public:conststd::stringtest="42";//staticconststd::stringtest="42";//fails};intmain(void){Aa;std::cout为什么不能使测试成为staticconst有充分的理由吗?我确实了解在c++11之前它受到标准的约束。我认为c++11引入了类内初始化以使其更友好一些。很长一段时间以来,我也没有这样的语义可用于整数类型。当然,它适用于conststd::stringA::test="42";形式的类外初始化我猜想,如果您可以使它成为非静态