草庐IT

const_iterators

全部标签

c++ - 将 temp 分配给 const ref 成员会导致段错误

用一个例子更好地解释:tok.h#includestaticconstchar*defaultDelim=".,;";classTokenizer{public:Tokenizer()://'delim'istheconstrefmemberthatisinitializedbythetempstringdelim((altDelim.size())?altDelim:std::string(defaultDelim)){}size_tscan(conststd::string&str){returnstr.find_first_of(delim);}staticvoidsetDeli

C++11 regex_token_iterator

嗯...我以为我理解正则表达式,我以为我理解迭代器,但C++11的正则表达式实现让我感到困惑...一个我不明白的地方:阅读regextokeniterators,我遇到了以下示例代码:#include#include#include#include#includeintmain(){std::stringtext="Quickbrownfox.";//tokenization(non-matchedfragments)//Notethatregexismatchedonlytwotimes:whenthethirdvalueisobtained//theiteratorisasuffi

c++ - 正在初始化类型为 "int &"的引用(不是 const 限定的),其值是 "bool"类型的一些 hack?

我遇到了这个C++代码here://roundalternate//Bias:noneforsequentialcallsbool_is_up=false;templateFloatTyperoundalternate(constFloatType&value,int&is_up=_is_up){if((is_up!=is_up))returnroundhalfup(value);returnroundhalfdown(value);}这让我很困惑,这应该如何工作?这应该如何在每次调用此函数时进行交替调用?这段代码是完全错误的,还是由于某些编译器的怪异而应该工作的?它似乎用g++编译得

c++ - G++ 与 Clang : inconsistent behavior for constexpr and const

考虑以下代码:constexprconstintA=42;constint&B=A;static_assert(&A==&B,"Bug");constexprconstint&C=B;static_assert(&A==&C,"Bug");intmain(){return0;}它被clang版本3.3完全接受,而g++(SUSELinux)4.8.120130909[gcc-4_8-branchrevision202388拒绝它:bug2.cpp:5:1:error:non-constantconditionforstaticassertionstatic_assert(&A==&B,

c++ - 在 const 声明的对象上修改可变是未定义的行为吗?

我有一个消息系统,我将一个结构传递给不同的函数。在一个浓缩的例子中,一条消息是这样描述的:structMessage{boolwasHandled;Message(){wasHandled=false;}};然后像这样调用消息处理程序:handleMessage(Message());消息作为常量引用传递。我这样做的主要动机是我可以写上面的一行。如果通过非常量引用传递,我将不得不写:Messagemessage;handleMessage(message);句柄标志指示消息是否由函数处理。因此,函数handleMessage需要修改wasHandled标志。一种可能的实现方式是:voi

c++ - 这是什么意思? : note: no known conversion for argument 1 from ‘int’ to ‘const account&’

我试图理解我们通常在C++程序中遇到的错误的含义。在编译程序时我遇到了一个错误(我故意犯了这个错误,请不要告诉我如何更正它)并且存在一个注释:note:noknownconversionforargument1from‘int’to‘constaccount&’我想看懂这张纸条的意思。我的程序是:#includeclassaccount{private:inta_no;public:account(){a_no=0;}voidshowData(){std::cout我知道我还没有定义一个可以接受一个参数的构造函数,这样做会消除我的错误。好的,编译时我得到了:file1.cpp:Infu

c++ - 迭代器 - vector::iterator 和 array::iterator 的重载函数

我只是想重载某个函数连续容器的迭代器(它们是std::vector::iterator、std::array::iterator和内置数组迭代器==原始指针)可以是有效参数。出于某种原因,我的函数无法针对vector和std::array进行编译:功能:templatevoidcatchIterator(typenamestd::array::iteratorit){//dosomthing}templatevoidcatchIterator(typenamestd::vector::iteratorit){//dosomthing}使用示例:std::arrayarr;autoit=

c++ - boost spirit istream_iterator 从流中消耗太多

考虑从更复杂的代码中提取的以下示例:#include#include#include#include#include#include#includenamespaceqi=boost::spirit::qi;namespacephx=boost::phoenix;//TheclassimplementsaXMLtagstoringthenameandavariablenumberofattributes:structTag{//ThetypedefdefinesthetypeusedforaXMLname:typedefstd::stringname_type;//Thetypedef

c++ - 将 unique_ptr<Object> 作为 unique_ptr<const Object> 返回

我有这样的方法:std::unique_ptrTable::GetStats()const{std::unique_ptrresult;//...//Preparestats.Undersomeconditionsanexceptionmaybethrown.//...returnresult;}问题是它无法编译:error:cannotbind‘std::unique_ptr’lvalueto‘std::unique_ptr&&’我可以使用以下绕过方法使其编译:returnstd::unique_ptr(result.release());不过好像有点过分了。我无法理解,从C++的角

c++ - propagate_const 和前向声明

我刚刚遇到了奇怪的std::experimental::propagate_const错误。以下片段演示了问题#include#include#includeclassFWD;//compilesclassA{std::unique_ptrm;};//compilesclassB{std::experimental::propagate_const>m;};//compilesclassC{std::unique_ptr>m;};//doesnotcompile!classD{std::experimental::propagate_const>>m;};所以您不能只用传播的uniqu