草庐IT

c++ - array<> 不能简单地在内部交换指针

对于用TR1引入STL的容器数组,我有下面的问题。在“TheC++standardlibraryATutorialandReference”一书的第263页中:Note,however,thatanarraycan’tsimplyswappointersinternally.Forthisreason,swap()haslinearcomplexityandtheeffectthatiteratorsandreferencesdon’tswapcontainerswiththeirelements.我想知道为什么array不能考虑交换指针的恒定开销? 最佳答

不能用 ^说“除了”

我有一个文本,我只想获得十六进制代码。像:“thisissometextthisistext\x64\x6f\x6e\x74\x74\x74\x72\x61\x61\x6e\x73\x6c\x6c\x61\x61\x74\x74\x65somemoretextoverhere”可以使用十六进制代码\X..但这似乎没有我能做的(^\x..)选择一切但十六进制代码。有解决方法吗?看答案您可以使用(?s)((?:\\x[a-fA-F0-9]{2})+)|.REGEX(将匹配并捕获到第1组中,任何1+的十六进制值序列,或者只能匹配任何其他字符,包括折断字符,并替换为有条件的替换模式(?{1}$1\n:

c++ - 当整数变量不能保存它不应该保存的值时,是否在 C++ 中的运行时捕获了 overflow_error

我正在学习C++,我试图编写这个函数来找到可以适合整数类型的最大斐波那契整数:voidfindFibThatFitsInAnInt(){intn1=1;intn2=1;intfib=0;try{while(true){fib=n1+n2;n1=n2;n2=fib;cout但问题是overflow_error根本没有被捕获。我知道这样做的其他方法:我知道我可以这样写:while(fib>=0){fib=n1+n2;n1=n2;n2=fib;cout并且因为fib只是一个“int”而不是一个unsignedint,所以当它被分配一个大于int类型容量的值时,它最终会变成问题是:在C++中是

c++ - 为什么我不能使用速记将标量值分配给类,而是先声明它,然后设置它的值?

我正在为C++编写一个UTF-8库作为练习,因为这是我的第一个真实世界的C++代码。到目前为止,我已经在名为“ustring”的类中实现了连接、字符索引、解析和编码UTF-8。看起来它在工作,但是两种看似相同的声明新ustring的方式表现不同。第一种方式:ustringa;a="test";有效,重载的“=”运算符将字符串解析到类中(它将Unicode字符串存储为动态分配的int指针)。但是,以下内容不起作用:ustringa="test";因为我收到以下错误:test.cpp:4:error:conversionfrom‘constchar[5]’tonon-scalartype‘

c++ - 为什么我不能将 boost::function 存储在 std::list 中?

我得到以下编译错误:error:expected`;'before'it'"这是我的代码:#include#includetemplatevoidexample(){std::list>::iteratorit;}为什么会这样?我该如何解决? 最佳答案 您需要将typename放在该行的前面,因为您执行::iterator的类型取决于模板参数T。像这样:templatevoidexample(){typenamestd::list>::iteratorit;}考虑这条线std::list>::iterator*it;这可能意味着乘法

c++ - 为什么 this 不能作为成员函数中的默认参数传递?

我试图将长度的当前值作为默认参数作为函数参数传递。但是编译器显示错误"'this'maynotbeusedinthiscontext"谁能告诉我我犯了什么错误。?classA{private:intlength;public:A();voiddisplay(intl=this->length){cout 最佳答案 您的成员函数:voiddisplay(intl=this->length)在概念上等同于:voiddisplay(A*this,intl=this->length);//translatedbythecompiler这意味

c++ - 为什么构造函数不能优雅地处理错误?

我阅读了以下内容TheinabilitytogracefullyhandleerrorsinC++constructorsisonegoodreasontoavoidconstructorsthatdomorethannothing,anduseinitializationfunctionsinstead.AndC++exceptionsarenotagracefulwaytohandleerrors,especiallyinconstructors.Ifyourmemberobjectconstructorthrowsanexception,andyouwanttocatchitin

c++ - 为什么我不能用 `= delete;` 声明一个纯虚函数?

简介纯虚函数使用通用语法声明:virtualf()=0;然而,自c++11以来,有一种方法可以传达(特殊)成员函数的显式不存在:Mystruct()=delete;//egdefaultconstructor问为什么不将此语法扩展到纯虚函数以实现通信此类操作的统一性?:virtualf()=delete;注意事项我知道显而易见的答案是因为标准是这么说的!。我想知道这背后的原因,以及是否有过这样的提议(或意图)。 最佳答案 粗略地说,区别在于:virtualvoidf()=0;说“这个类是抽象的,我可能没有编写这个成员函数的实现”(尽

c++ - 为什么我们可以直接拷贝指针,而不能在c++中直接拷贝数组

定理说我们不能将一个数组初始化为另一个数组的拷贝。但是我们可以将指针初始化为指向另一个数组第一个元素的指针的拷贝:inta[]={0,1,2};inta2[]=a;       //errorint*a3=a;        //OK为什么inta2[]=a;是错误的? 最佳答案 在C++中不能将数组分配给另一个数组对象或从另一个数组对象初始化数组,因为它们不能在C中,而且由于历史原因它们不能在C中不再真正相关。在非常早期的proto-C中,会有一些混淆是否像inta[]={0};这样的赋值?intb[]={0};a=b;应该将数组

c++ - 为什么我不能使用 == true 检查变量是否有值?

if(10)是真的,但是if(10==true)是假的。有人能告诉我为什么第一种情况将数字转换为bool而第二种情况没有吗? 最佳答案 if(10)等同于if(10!=0),而if(10==true)是if(10==1)(因为true被提升为int类型的值1)。通俗地说:碰巧满足某些属性的两件事不会自动成为同一件事。(例如,donut和飞盘都是圆形的,但这并不意味着donut等于飞盘。整数和bool值都可以在bool上下文中进行评估,但这并不意味着每个整数都被评估为true等于每个truebool值。)