草庐IT

c++ - 在类声明中初始化 const 成员变量时 Debug模式下的异常

#include#include#include#includeclassX{public:X(){std::cout>ValidatorType;constValidatorTypem_validators=ValidatorType{{"some-string",[](){//validationcodestd::cout以上代码使用Xcode7.2.1和Clang7.0.2在OSX上以调试和Release模式成功构建和运行。它还使用VisualStudioExpress2013forWindowsDesktop在Windows7上以Release模式成功构建和运行。但是,在Win

c++ - 将光标位置存储在类对象中(ncurses c++)

我正在使用QTCreator编译我的C++代码和图书馆。假设我们有以下类定义(.h):structcoordinateYX{inty;intx;coordinateYX(longintyPos,longintxPos);coordinateYX(){}}classRogue{private:longinthealth;coordinateYXheroPosition;public:longintgetHealth();voidsetHealth(longintinitHealth);voidhealthChange(longintvDelta);coordinateYXgetHeroP

c++ - 仅在类中使用静态成员

只包含静态数据成员的类是否明智?我要实现的类如下所示:classmyClass{private://listofstaticdatamemberspublic://setofmethods}这些方法使用静态数据并在运行时修改它们。我从来没有写过一个只使用静态数据的类,但其中7个成员对我来说看起来有点奇怪。所以我想知道这是否符合C++程序标准。 最佳答案 恕我直言,这种方法没有任何问题。它看起来有点java风格。静态成员基本上充当封装在类中的全局变量。将它们放在类中的好处是可以通过自然的方式定义setter和getter(在您的情况下

c++ - 在类的构造函数中初始化映射时如何避免内存泄漏?

我想在一个类的构造函数中初始化一个(指向一个)map的指针。我编写的程序可以编译,但由于段错误而在运行时失败。我可以通过为map动态分配内存来解决问题,但是Valgrind通知我内存泄漏。如何正确初始化类?举个例子#include#include#include#includeclassMemoryLeak{public:MemoryLeak(std::vector&inp){inti=0;std::map*tmp=newstd::map;for(std::string&s:inp){//(*problem_map)[s]=i++;//Line12:causesasegfault(*t

c++ - 运算符在类中定义为 friend 的奇怪行为

我不明白下面这段代码是怎么回事:structA{};structB{B(){}B(constA&){}friendBoperator*(constB&,constB&){returnB();}};intmain(){Bx=A()*A();return0;}当我编译(同时使用clang和gcc4.9.2)时,我在“Bx=A()*A()”行收到一条错误消息;clang说“二进制表达式的操作数无效”。如果我从类内部获取operator*定义,一切都100%ok!structA{};structB{B(){}B(constA&){}friendBoperator*(constB&,constB

C++ “+”(加号)在类实例前面

你好,我正在阅读Mach7的以下代码(顺便说一句,看起来不错,我想知道为什么c++17没有采用它,但那是题外话……)booloperator==(constTerm&left,constTerm&right){//std::clogs;//varv;varv,t,f;Match(left,right){Case(C(s),C(+s))returntrue;Case(C(&v,&t),C(&+v,&+t))returntrue;Case(C(&f,&t),C(&+f,&+t))returntrue;Otherwise()returnfalse;}EndMatchreturnfalse;/

c++ - std::hash 专门化我自己的类并在类中使用它

我定义了一个类Foo,并希望有一个采用std::unordered_set的公共(public)成员函数作为参数类型。能够使用std::unordered_set,我必须专攻std::hash在命名空间标准中。如果我不尝试使用std::unordered_set也没关系作为Foo中的参数类型成员函数。但是,一旦我想使用std::unordered_set作为Foo中的参数类型成员函数,我在定义特化时遇到问题std::hash.如果我在Foo之后做声明,Foo上有错误声明因为std::hash没有定义。一招std::hash之前的定义,它也不起作用,因为现在Foo未知。Foo的转发声明在

c++ - 在类中初始化固定大小的常量数组

考虑以下类:classA{constintarr[2];public:A(){}};是否可以从构造函数初始化列表或以任何其他方式而不是在声明它的行上初始化arr(即constintarr[2]={1,2};)?请注意,我对适用于C++98的方法很感兴趣! 最佳答案 通过将它们包装在struct中,例如:classA{structData{intarr[2];};Dataconstarr;public:A():arr(someOtherStruct){}};这确实意味着要访问数据,您必须编写arr.arr。可以通过继承struct来避

c++ - 在类定义之外定义静态类函数

考虑以下简单的类定义-//fileA.h#includeclassA{public:staticintf();staticconstintaa;};//fileA.cpp#include"a.h"usingnamespacestd;constintA::aa=10;intA::f(){returnA::aa;}这是我的主文件-//main.cppfile#include"a.h"#include"b.h"usingnamespacestd;constintA::aa=100;intA::f();intmain(){cout当我尝试编译main.cpp时,编译器提示说类外main.cpp

c++ - 在类外定义的模板类中的模板方法

我想要一个模板类,里面有一个模板方法,并在类外定义该方法。我试着四处寻找答案,但找不到。例如:templateclassType{private:Avalue;public:templateAMethod(Bvalue){//somecodehere,it'snotimportantforthesakeofthisexample}}如何将方法Method的定义移动到类主体之外?提前致谢。 最佳答案 语法是templatetemplateAType::Method(Bvalue){//somecodehere,it'snotimpor