草庐IT

c++ - 为什么 const 变量是可修改的?

我正在阅读一本关于运算符重载示例的教科书,它让我想知道如何通过“常量值”返回(例如使用operator+)。据我了解,如果我以const形式返回任何内容,则以后无法对其进行修改。假设我有这个粗略的例子:#includeusingnamespacestd;classTemp{private:intval;public:Temp(){};Temp(intv):val(v){};constTempoperator+(constTemp&rhs)const{returnTemp(this->val+rhs.val);}intgetVal(){returnthis->val;}voidsetVa

对象被推回并且函数退出后,C++ vector 推回崩溃

问题是另一个访问vector并删除迭代器的类的愚蠢错误。与下面的代码无关。抱歉浪费您的时间。我一定是漏掉了一些基本的东西。我有一个函数可以创建一个对象,操作它的数据,然后将它插入一个vector中。函数退出的那一刻,程序崩溃并出现SIGSEV,我只能盯着(Kdevelopgcc4.5gdb)看:/***Thedtoronlyerasestheelements,andnotethatifthe*elementsthemselvesarepointers,thepointed-tomemoryis*nottouchedinanyway.Managingthepointeristheuser

c++ - 从 priority_queue 弹出时出现排序问题,这是 std::priority_queue 的错误吗

#include#include#include#includestructTemp{intp;std::stringstr;};structTempCompare{booloperator()(Tempconst&a,Tempconst&b){returna.p>b.p;}};intmain(){std::priority_queue,TempCompare>pq;//EnableandDisablethefollowinglinetoseethedifferentoutput//{Tempt;t.p=8;t.str="str1";pq.push(t);}{Tempt;t.p=8;t

c++ - 怎么会?特征中未检测到别名

问题很简单:看代码。两个静态断言都通过了。我不希望第二个通过。这是错误还是正常行为?#include#includetemplateclassTemp,classSpecialization>structIsSpecialization:std::false_type{};templateclassTemp,class...Ts>structIsSpecialization>:std::true_type{};templatestructA{};templateusingAT=A;intmain(){static_assert(IsSpecialization>{});static_a

c++ - 实现格雷厄姆扫描以找到凸包

我正在尝试实现GrahamScan在C++中,但它不起作用,我找不到原因。任何线索将不胜感激。经过一些尝试后,似乎我总是有m_M=2并且这2个点是最高的y点,如果有帮助的话。通过叉积判断是右转还是左转。qrealInterpolation::ccw(QPointFpt1,QPointFpt2,QPointFpt3){return(pt2.x()-pt1.x())*(pt3.y()-pt1.y())-(pt2.y()-pt1.y())*(pt3.x()-pt1.x());}点积除以范数得到cos,因为对角度排序与对[0,Pi]中的cos排序相同。qrealInterpolation::d

c++ - 连续调用临时对象的方法

这个问题在这里已经有了答案:Lifetimeoftemporaries(2个答案)关闭8年前。是否符合以下代码标准:structTemp{Temp&op1(){...;return*this;}Temp&op2(){...;return*this;}//moreop...};Temp().op1().op2()....;//safeornot?WhichparagraphfromISO12.2qualifiesit?

c++ - 为什么指针分配的内存在函数之后仍然存在,而不是数组?

所以,我在C++书中看到的基本文本输入函数的上下文中问这个问题:char*getString(){chartemp[80];cin>>temp;char*pn=newchar[strlen(temp+1)];strcpy(pn,temp);returnpn;}因此temp声明了一个包含80个字符的数组,这是一个自动变量,一旦getString()返回,其内存将被释放。有人建议,如果您出于某种原因返回temp,它在函数外部的使用将不可靠,因为一旦函数完成,该内存就会被释放。但是由于我也在相同的上下文中声明了pn,为什么它的内存没有被丢弃呢? 最佳答案

c++ - 如何使用环境变量转换路径(例如 %temp%)

我正在寻找一个winapi函数来扩展带有环境变量的路径。我试过GetFullPathName但结果很奇怪:"%appdata%\something"变成"C:\\%appdata%\something".如何正确地做到这一点? 最佳答案 尝试ExpandEnvironmentStrings. 关于c++-如何使用环境变量转换路径(例如%temp%),我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/qu

c++ - 在 C++ 中一直读到文件末尾

我正在尝试读取一个电话簿应用程序的文件末尾,该应用程序正在从C转换为C++。当我打印文件的结果时,我得到了这个:johnnysmith(Home)3(Cell)4x☺>x☺>(Home)4(Cell)4它应该打印:johnnysmith(Home)3(Cell)4现在我正在使用while(!infile.eof())我读过的是一种糟糕的做法,但是当我使用infile.getline()我得到了名字和姓氏的重复,而且格式都被抬高了。无论如何(或另一种方法)是否有消除输入末尾的垃圾或另一种读取C++文件末尾的方法来修复此问题。我一直在阅读不同的解决方案,但很多网站似乎都同意的是fgets,

c++ - 将项目推送到 STL 容器后出现段错误

typedefstructtemp{inta,b;char*c;temp(){c=(char*)malloc(10);};~temp(){free(c);};}temp;intmain(){tempa;listl1;l1.push_back(a);l1.clear();return0;}给出段错误。 最佳答案 你没有复制构造函数。当您将“a”插入列表时,它会被复制。因为你没有复制构造函数(为c分配内存并从旧c复制到新c)c是a中的相同指针和列表中a的拷贝。两个a的析构函数都被调用,第一个会成功,第二个会失败,因为c指向的内存已经被释