草庐IT

c++ - 为什么 auto_ptr 似乎违反了 Visual C++ 上的私有(private)继承?

背景信息:这是在VisualStudio2008上检测到的,并在VisualStudio2013上再次确认。G++对代码大喊大叫,而Visual默默地接受了私有(private)继承漏洞。所以,在VisualC++上,我们有以下代码:classBase{};classDerived:Base{};//inheritsprivately.Addingexplicitlythe//keywordprivatechangesnothingintmain(){std::auto_ptr(newDerived);//compiles,whichisNOTEXPECTEDstd::auto_ptr

c++ - std::packaged_task 没有违反销毁 promise ?

我在使用打包任务时遇到了一些非常奇怪的事情。阅读时~packaged_task我的印象是,如果std::packaged_task在执行之前被销毁,则promise将被破坏,并且尝试从future获取结果应该抛出std::future_error。但是,在VisualStudio2013上,情况似乎并非如此。获取以下代码:#include#include#includeintmain(){std::futuref;{std::packaged_tasktask([](){return3;});f=task.get_future();}std::cout我希望在f.get()上获得一个s

c++ - 通过 C 强制转换访问结构的第一个字段是否违反了严格的别名?

此代码是否违反严格别名?struct{intx;}a;*(int*)&a=3更抽象地说,只要原始读/写操作类型正确,在不同类型之间进行强制转换是否合法? 最佳答案 首先,在C中强制转换是合法的。§6.7.2.1/13:Withinastructureobject,thenon-bit-fieldmembersandtheunitsinwhichbit-fieldsresidehaveaddressesthatincreaseintheorderinwhichtheyaredeclared.Apointertoastructureob

c++ - 在 C++ 标准中,当违反 "shall"要求时指定发生什么?

例如,名言(§3.2/1)Notranslationunitshallcontainmorethanonedefinitionofanyvariable,function,classtype,enumerationtype,ortemplate.我认为除非另有说明,否则我认为“应”要求应被解释为隐含地遵循“否则程序格式错误”。然而,其他人声称“应该”的意思是“否则行为未定义”。在我遇到的每种情况下,在“应”要求没有遵循“否则行为未定义”或“不需要诊断”之类的标准时,它发生的规则是显然是可诊断的,并且由我所知道的所有编译器诊断(上面的段落是一个例子)。这就是为什么我认为它的意思是“否则程

c++ - 动态库是否违反 C++ 标准?

C++标准3.6.3规定静态持续时间的初始化对象的析构函数作为从main返回的结果和调用exit的结果被调用在windows上你有FreeLibrary和linux你有dlclose来卸载动态链接库。您可以在从main返回之前调用这些函数。卸载共享库的副作用是库中定义的静态对象的所有析构函数都会运行。这是否意味着它违反了C++标准,因为这些析构函数已过早运行? 最佳答案 这是一个毫无意义的问题。C++标准没有说明dlclose做什么或应该做什么。如果标准中包含dlclose的规范,它肯定会指出dlclose是3.6.3的一个异常(e

java - Collections.sort() throws 比较方法违反了它的一般约定!异常(exception)

我正在尝试对List对象进行排序,但抛出了此异常(但仅适用于大型列表)排序代码:ListsentenceList=finalRepresentation.getSentences();Collections.sort(sentenceList);//FinalSentence类头:publicclassFinalSentenceimplementsComparable{...}compareTo()实现:@OverridepublicintcompareTo(FinalSentenceo){if(this==o){return0;}if(this.score>o.score){retu

java - 比较方法违反了它在 Java 7 中的一般约定

在Java7中编译一些Java代码然后运行它后,我得到一个“比较方法违反其一般契约(Contract)”。我已阅读Comparisonmethodviolatesitsgeneralcontract!Java7only并意识到我的代码有问题,在以前的Java版本中被忽略了。但是我无法弄清楚我的代码有什么问题。Collections.sort()会产生错误。我的代码是:publicComparatorsortBySmoothDays(){Comparatorc=newComparator(){publicintcompare(Objectarg0,Objectarg1){Datedate

java - 访问者模式如何不违反开放/封闭原则?

FromWikipedia:Theideawasthatoncecompleted,theimplementationofaclasscouldonlybemodifiedtocorrecterrors;neworchangedfeatureswouldrequirethatadifferentclassbecreated.Thatclasscouldreusecodingfromtheoriginalclassthroughinheritance据我了解,访问者模式是一种强大的技术,可以通过使用双重调度来遍历实现相同接口(interface)的相似但不同的对象。在我的一个Java示例

java - Collections.unmodifiableXXX 方法是否违反 LSP?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题吗?更新问题,以便editingthispost提供事实和引用来回答它.关闭3年前。ImprovethisquestionLiskovSubstitutionprinciple是SOLID的原则之一.我已经多次阅读这个原则并试图理解它。这是我的想法,Thisprincipleisrelatedtostrongbehavioralcontractamongthehierarchyofclasses.Thesubtypesshouldbeabletobereplacedwithsupertypewithoutvi

mysql - 如何在不违反唯一约束的情况下交换 MySQL 中两行的值?

我有一个带有优先级列的“任务”表,它有一个唯一的约束。我正在尝试交换两行的优先级值,但我一直违反约束。我在类似情况的某处看到了这句话,但不是在MySQL中。UPDATEtasksSETpriority=CASEWHENpriority=2THEN3WHENpriority=3THEN2ENDWHEREpriorityIN(2,3);这会导致错误:ErrorCode:1062.Duplicateentry'3'forkey'priority_UNIQUE'是否可以在不使用虚假值和多个查询的情况下在MySQL中完成此操作?编辑:这是表结构:CREATETABLE`tasks`(`id`in