草庐IT

const-iterator

全部标签

c++ - std::string::iterator 偏移并返回

我是否可以通过某个成员将迭代器设置为字符串中的第5位,或者我必须执行for(i=0;i?给定一个迭代器,如何将其转换为字符串中的数字偏移量?如果std::iterators无法做到这一点,可以提升吗?迭代器偏移量 最佳答案 CanIsetaniteratortoposition5inastringviasomemember您可以使用std::advancestd::advance(iterator,5);或iterator+=5;GivenanIterator,howcanIconvertthattoanumericoffsetin

c++ - const 引用字段作为 C++ 类中的只读属性

在C++类中使用const引用字段作为只读getter好不好?我的意思是,这段代码符合良好的做法吗?classcheck{private:int_x;public:constint&x=_x;voidsetX(intv){_x=v;}};它的工作方式非常类似于C#属性、恕我直言,并且在类使用代码中非常简单和干净:checks;inti;std::cin>>i;s.setX(i);std::cout 最佳答案 dothiscodemeetgoodpractices?并非如此,因为它引入了不必要的复杂性和空间开销。此外,无论访问的值如何

c++ - const 引用字段作为 C++ 类中的只读属性

在C++类中使用const引用字段作为只读getter好不好?我的意思是,这段代码符合良好的做法吗?classcheck{private:int_x;public:constint&x=_x;voidsetX(intv){_x=v;}};它的工作方式非常类似于C#属性、恕我直言,并且在类使用代码中非常简单和干净:checks;inti;std::cin>>i;s.setX(i);std::cout 最佳答案 dothiscodemeetgoodpractices?并非如此,因为它引入了不必要的复杂性和空间开销。此外,无论访问的值如何

c++ - *non*-const 引用会延长临时人员的生命周期吗?

曾几何时,我认为这样的代码会失败:constMyClass&obj=MyClass();obj.DoSomething();因为MyClass对象将在其完整表达式结束时被销毁,留下obj作为悬空引用。但是,我(在这里)了解到这不是真的。该标准实际上有一个特殊规定,允许const引用使临时对象保持事件状态,直到所述引用本身被销毁。但是,需要强调的是,只有const引用具有这种能力。今天我在VS2012中运行了下面的代码作为实验。structFoo{Foo(){std::cout调用f()时的输出是:ctorHelloworlddtor所以我查看了C++11草案标准,但只发现了这个(第12

c++ - *non*-const 引用会延长临时人员的生命周期吗?

曾几何时,我认为这样的代码会失败:constMyClass&obj=MyClass();obj.DoSomething();因为MyClass对象将在其完整表达式结束时被销毁,留下obj作为悬空引用。但是,我(在这里)了解到这不是真的。该标准实际上有一个特殊规定,允许const引用使临时对象保持事件状态,直到所述引用本身被销毁。但是,需要强调的是,只有const引用具有这种能力。今天我在VS2012中运行了下面的代码作为实验。structFoo{Foo(){std::cout调用f()时的输出是:ctorHelloworlddtor所以我查看了C++11草案标准,但只发现了这个(第12

c++ - 如何将 const char* 转换为 char*

谁能告诉我如何将constchar*转换为char*?get_error_from_header(void*ptr,size_tsize,size_tnmemb,void*data){ErrorMsg*error=(ErrorMsg*)data;char*err=strstr((constchar*)ptr,"550");//errorcannotconvertconstchar**tochar*if(err){strncpy(error->data,(char*)ptr,LENGTH_ERROR_MESSAGE-1);error->data[LENGTH_ERROR_MESSAGE-

c++ - 如何将 const char* 转换为 char*

谁能告诉我如何将constchar*转换为char*?get_error_from_header(void*ptr,size_tsize,size_tnmemb,void*data){ErrorMsg*error=(ErrorMsg*)data;char*err=strstr((constchar*)ptr,"550");//errorcannotconvertconstchar**tochar*if(err){strncpy(error->data,(char*)ptr,LENGTH_ERROR_MESSAGE-1);error->data[LENGTH_ERROR_MESSAGE-

c++ - 在 C++ 中更改 const 变量的值

这个问题在这里已经有了答案:WeirdBehaviourwithconst_cast[duplicate](2个回答)关闭6年前。我正在尝试更改定义为intconst的变量的值,如下所示。constintw=10;int*wp=const_cast(&w);*wp=20;w的值没有改变,即使在赋值之后也是10,尽管它表明w和wp都指向同一个内存位置。但是如果在声明时定义如下,我可以更改w的值inti=10;constintw=i;如果我更改i的声明以使其像in一样constconstinti=10;w的值不变。在第一种情况下,为什么w的值没有改变,即使w和wp指向同一个内存位置[这是我

c++ - 在 C++ 中更改 const 变量的值

这个问题在这里已经有了答案:WeirdBehaviourwithconst_cast[duplicate](2个回答)关闭6年前。我正在尝试更改定义为intconst的变量的值,如下所示。constintw=10;int*wp=const_cast(&w);*wp=20;w的值没有改变,即使在赋值之后也是10,尽管它表明w和wp都指向同一个内存位置。但是如果在声明时定义如下,我可以更改w的值inti=10;constintw=i;如果我更改i的声明以使其像in一样constconstinti=10;w的值不变。在第一种情况下,为什么w的值没有改变,即使w和wp指向同一个内存位置[这是我

c++ - STL 算法 : Why no additional interface for containers (additional to iterator pairs)?

我想知道为什么STL不会重载它们的算法函数,这样我就可以通过简单地提供一个容器而不是采用更冗长的方式来传递begin+end迭代器来调用它们。我当然理解为什么我们还想使用迭代器对来处理容器/数组的子序列,但是,几乎所有对这些方法的调用都使用了整个容器:std::for_each(myVector.begin(),myVector.end(),doSomething);我会发现只写更方便、可读和可维护std::for_each(myVector,doSomething);STL不提供这些重载是否有原因?[编辑:我的意思不是用这个受限的接口(interface)替换接口(interface