草庐IT

c++ - 只提供一个 move 构造函数是不是不好的形式?

我想返回一个类型为Foo的不可复制对象从一个函数。这基本上是一个辅助对象,调用者将使用它来执行一组操作,并使用析构函数在操作完成后执行一些清理工作。出现前rvaluereferences,我会返回一个shared_ptr或类似的东西。对于右值引用,另一种选择是将构造函数和复制构造函数设为私有(private),并将唯一的公共(public)构造函数设为move构造函数。Foo看起来像这样:classFoo:boost::noncopyable{private:Foo(/*whatevertherealctorneeds*/);public:Foo(Foo&&src);//...inte

c++ - 为什么有一个本地仿函数不好?

例如,如果谓词只使用一次,那么在main函数中声明类doubler有什么问题?#include#include#defineSIZE10intmain(){std::listmyList;for(inti=0;i 最佳答案 此设置的问题在于,至少在C++03中,您不能将局部仿函数用作模板参数,因为它没有外部链接。这意味着从技术上讲,上述代码是不合法的。但是,他们正在C++0x中修复此问题,因为这是一个非常愚蠢的限制,并且由于VS2010具有基本的C++0x支持,因此上述代码完全没问题。简而言之,您的问题的答案是,如果您使用的是符合C

c++ - 无限循环的形式不好吗?

所以我有一些C++代码用于BFS算法中的节点回溯。它看起来有点像这样:typedefstd::mapMapType;boolIsValuePresent(constMapType&myMap,intbeginVal,intsearchVal){intcurrent_val=beginVal;while(true){if(current_val==searchVal)returntrue;MapType::iteratorit=myMap.find(current_val);assert(current_val!=myMap.end());if(current_val==it->seco

c++ - 链表、树等的递归析构函数不好吗?

对于我目前的学习练习,我正在研究链表和树。我最近看到一个建议,通过让每个节点删除其子节点来递归地销毁数据结构。然而,在我发现的几乎所有示例中,节点析构函数都是空的,一些管理类使用某种形式的迭代和删除来处理销毁。从可靠性和/或风格的角度来看,递归析构函数本身有什么不好的地方吗?下面是我对这两种方式的理解的实现。递归销毁:#includestructNode{staticintcount;Node():num_(count++),p_next_(0){}~Node(){std::coutp_next_=newNode();p_head->p_next_->p_next_=newNode()

c++ - 方法中的静态局部变量是一种不好的做法?

有些事情困扰着我。在非线程程序中,局部静态变量(方法内部)还是静态类成员更好?在这个例子中:classC{public:C(){};voidfoo();};voidC::foo(){staticintbar=0;bar++;printf("%d\n",bar);}如果bar仅在C::foo()中使用,是否被视为不良做法? 最佳答案 两者都不是更好。它们服务于非常不同的用例 关于c++-方法中的静态局部变量是一种不好的做法?,我们在StackOverflow上找到一个类似的问题:

c++ - 为什么#define 不好,什么是合适的替代品?

#definedItemNameL"CellPhone" 最佳答案 将其定义为常量变量。这是一个很好的编程习惯。constwchar_t*dItemName=L"CellPhone";如果您稍后需要知道字符串的长度,则将其定义为数组:constwchar_tdItemName[]=L"CellPhone";此外,为什么#define不好:它将所有使用单词dItemName的地方转换为L"CellPhone"。示例:struct{intdItemName;}SomeStruct;将失效:struct{intL"CellPhone";}

c++ - 在处理低级字节操作时 reinterpret_cast 不好吗?

我正在编写一个websocket服务器,我必须处理需要取消屏蔽的屏蔽数据。掩码是unsignedchar[4],数据也是unsignedchar*buffer。我不想逐字节异或,我更愿意一次异或4个字节。uint32_t*constend=reinterpret_cast(data_+length);for(uint32_t*i=reinterpret_cast(data_);i!=end;++i){*i^=mask_;}在这种情况下使用reinterpret_cast有什么问题吗?替代方案是以下代码,它不那么清晰且速度不快:uint64_tj=0;uint8_t*end=data_+

c++ - 静态链接到使用不同版本的 C 运行时库构建的库,好还是不好?

考虑这个场景:应用程序链接到第3方库A。A使用MSVC2008构建,并静态链接(即使用/MT构建)到C运行时库v9.0。该应用程序是使用MSVC2005构建的,静态链接到A和(使用/MT)C运行时库v8.0。我可以看到这方面的问题-例如,如果在运行时库版本之间的header中更改了类型。是否注意保持运行时库header在版本之间兼容,或者应该始终确保所有静态链接库都链接到同一版本的运行时库? 最佳答案 应该不是问题。每个库都链接到自己的运行时,并且大部分功能独立于流程中的其他库。当库ABI定义错误时,就会出现问题。如果在一个库中分配

c++ - STL 映射运算符 [] 不好吗?

我的代码审查员指出map的operator[]的使用非常糟糕并导致错误:map[i]=newsomeClass;//potentialdanglingpointerwhenexecutedtwice或者if(map[i]==NULL)...//implicitlycreatetheentryiinthemap虽然我在阅读API后了解到insert()更好的风险,因为它检查重复项,从而可以避免发生悬空指针,但我不明白如果处理对了,为什么[]根本就不能用呢?我选择map作为我的内部容器正是因为我想使用它快速和self解释的索引功能。我希望有人能和我多争论或者站在我这边:)

c++ - system() 有什么不好?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭9年前。Improvethisquestion鉴于您正在构建一个Windows专用程序,为什么对system()的调用如此讨厌?自从我开始使用C++编程以来,“不要接触系统”是我听过很多次的话。我已经乖乖地遵守了这个原则,但这有什么不好呢?