草庐IT

hover-class

全部标签

c++ - xvalues : differences between non class types and class types

考虑下面的最小示例:#includestructS{};intmain(){Ss;std::move(s)=S{};}它编译没有错误。如果我改为使用非类类型,则会收到错误。例如,以下代码无法编译:#includeintmain(){inti;std::move(i)=42;}枚举、作用域枚举等也是如此。错误(来自GCC)是:usingxvalue(rvaluereference)aslvalue这背后的原理是什么?我想这是对的,但我想了解我可以对除非类之外的所有类型执行此操作的原因是什么。 最佳答案 C++允许对类对象右值进行赋值,

c++ - 多重继承 : 2Classes1Method

我刚刚试过这段代码:structFaceOfPast{virtualvoidSmile()=0;};structFaceOfFuture{virtualvoidSmile()=0;};structJanus:publicFaceOfPast,publicFaceOfFuture{virtualvoidSmile(){printf(":)");}};...voidmain(){Janus*j=newJanus();FaceOfFuture*future=j;FaceOfPast*past=j;future->Smile();past->Smile();deletej;}它按预期工作(输出

c++ - 经典C++(C with Classes)的Call/Return特性,现代语言有哪些?

在TheDesignandEvolutionofC++的第57页上,Dr.Stroustrup谈到了一个功能,该功能最初是CwithClasses的一部分,但它不是现代C++(标准C++)的一部分。该功能称为call/return。这是一个例子:classmyclass{call(){/*dosomethingbeforeeachcalltoafunction.*/}return(){/*dosomethingelseaftereachcalltoafunction.*/}...};我觉得这个功能非常有趣。有没有现代语言有这个特殊的功能? 最佳答案

c++ - 错误 : name followed by '::' must be a class or namespace name

我正在尝试构建我的第一个ATLDLL项目,我在其中使用ADODB。这里的问题是我给每个ADODB类都加了下划线ADODB::_ConnectionPtrspADOConnection;当我将鼠标移到ADODB::_ConnectionPtr上时,我得到namefollowedby'::'mustbeaclassornamespacenamespADOConnection我得到expecteda';'。请问这是什么意思?请问我该如何解决?非常感谢! 最佳答案 编译器无法找到ADODB的声明。确保在编译器提示的翻译单元中包含相关head

c++ - 有类(class)的 friend 但不能访问私有(private)成员

友元函数应该可以访问一个类的私有(private)成员吧?那么我在这里做错了什么?我已经将我的.h文件包含在运算符#includeusingnamespacestd;classfun{private:inta;intb;intc;public:fun(inta,intb);voidmy_swap();inta_func();voidprint();friendostream&operator 最佳答案 在这里...ostream&operator你需要ostream&operator(我被这件事折磨了无数次;你的运算符重载的定义与声

c++ - "Template argument for template template parameter must be a class template or type alias template"

templatestructList{};templateclass>structListHelper;templatestructListHelper>{};^/*Error:Templateargumentfortemplatetemplateparametermustbeaclasstemplateortypealiastemplate*/怎么了?我正在使用clang++SVN。 最佳答案 您有一个模板模板参数。您必须传递一个模板作为其参数。您改为将模板实例化作为其参数传递-这是一个具体类,而不是模板(其所有参数均已绑定(bi

c++ - 我们是否需要显式调用分配给 "simple POD classes"的 "placement new"的析构函数?

这里的“简单”是指具有非虚空析构函数或POD类型的类。典型例子:charbuffer[SIZE];T*p=new(buffer)T;...p->~T();//如果我们不在p上调用显式析构函数会怎样?我不认为这是未定义的行为或内存泄漏。重用buffer有什么问题吗? 最佳答案 从技术上讲,假设析构函数不释放在构造期间获取的任何资源,则可能没有必要。但是,考虑到非技术方面——代码的维护和演进——我会坚持最佳实践——构建的东西应该被破坏。要考虑的场景-如果将来某些更改将确定要放入析构函数中的相关代码怎么办?你会记得你怀疑过那种类型的对象的

c++ - Class vs Struct 仅用于数据?

在这种情况下,使用类而不是结构有什么优势吗?(注意:它只会保存变量,永远不会有函数)classFoo{private:structPos{intx,y,z};public:PosPosition;};对比:structFoo{structPos{intx,y,z}Pos;};类似问题:WhenshouldyouuseaclassvsastructinC++?WhatarethedifferencesbetweenstructandclassinC++?WhenshouldIuseastructinsteadofaclass? 最佳答案

C++ 错误 : object of abstract class type is not allowed: pure virtual function has no overrider

继承有问题。我不知道我做错了什么。FigureGeometry.h#ifndefFIGUREGEOMETRY#defineFIGUREGEOMETRYstaticconstfloatPI=3.14159f;classFigureGeometry{public:virtualfloatgetArea()const=0;virtualfloatgetPerimeter()const=0;};#endifCircle.h#ifndefCIRCLE#defineCIRCLE#include"FigureGeometry.h"classCircle:publicFigureGeometry{fl

c++ - 前向声明包括,在声明之上包括(ClassFwd.h + Class.h)

在EffectiveC++(第3版)中,ScottMeyers在第31项中建议,类应该在其经典的声明(.h)和定义(.cpp)文件之上有一个前向声明包含文件(fwd.h)不需要完整定义的类可以使用,而不是前向声明自己。我有点看到它的情况,但我真的不认为这是一个可行的选择......它似乎很难维护,相当大材小用而且几乎没有必要。但是,我可以看到它用于模板前向声明,这是相当繁重的。但是对于简单的类?维护起来似乎很痛苦,并且会创建大量几乎空的包含文件,这些文件的用途很小……值得这么麻烦吗?这是一个例子://Class.hclassClass{Class();~Class();};//Clas