草庐IT

c++ - 带有转换运算符的类上的 static_cast

我刚刚遇到这种行为,我很难理解为什么这不起作用。enumclassTestEnum{Foo,Bar};classMyClass{public:operatorTestEnum(){returnm_enum;}TestEnumm_enum=TestEnum::Foo;}MyClasstheClass;intenumValue=static_cast(theClass);//doesnotwork,conversionoperatornotcalledintenumValue=static_cast(static_cast(theClass))//worksasexpected我知道编译器

c++ - 实现或定义在未命名/匿名命名空间内声明的类或函数

在未命名(匿名)命名空间之外定义函数或类成员的实现是否合法?我的编译器接受它,但我想确保它是合法的例如//////////////////foo.cppnamespace{structX{voidfoo(intx);};}//Isthislegal?voidX::foo(intx){}原因是我想避免我们的uncrustify格式强加的不必要的缩进 最佳答案 真的和下面的没什么区别,完全合法:namespacens{structs{voidf();};}usingnamespacens;voids::f(){}命名空间中的名称被带入全

c++ - 具有指针结构的类是否需要析构函数

我有一个类,它有一个结构,其中一个成员是指针。structgroup{void*v1,void*v2;};classA{A(group&handle):m_handle(handle)private:groupm_handle;};类A中没有指针成员。当A中没有定义析构函数时,我没有看到任何问题(例如内存泄漏)。我了解到,当对象A超出范围时,会调用A的析构函数如果A中存在成员类,则调用它们的析构函数,依此类推。那么,像上面的m_handle这样的成员结构会发生什么-它们是否具有类似于析构函数的任何东西,以及当对象A超出范围时如何删除结构组中的两个空指针? 最

c++ - 在模板中提取常见的类行为

我发现在我的程序中我需要让几个类使用以下通用模式。其背后的想法是resource_mgr维护一个指向resource对象的引用计数指针列表,并专门控制它们的生命周期。客户端不能创建或删除resource实例,但可以从resource_mgr请求它们。classresource_impl{public://...private:resource_impl(...);~resource_impl();//...friendclassresource_mgr;}classresource_mgr{public://...shared_ptrnew_resource(...);private:

C++:首先调用/初始化哪个?其成员变量的类构造函数或构造函数?

在我的main中,如何在Cpp中初始化这样的东西:Testingtest?classTesting{public:Testing();voidinitalize();~Testing();voidrun();private:intx;inty;intz;boolisBugged;OtherClassotherClass_;};顺序是什么? 最佳答案 首先调用类构造函数,并且可以使用初始化列表来参数化成员构造函数调用,否则在类构造函数入口点使用它们的默认构造函数。Class():otherClass_("fred",42){//cto

c++ - 具有非静态 lambda 成员的类不能使用默认模板参数?

这个小测试程序:#include//template//structc{std::functionf=[](inti){returni+i;};};intmain(){};Clang-3.2编译正常,但是从GCC4.7.1和4.8我得到了奇怪的错误:t.cc:6:31:error:defaultargumentfortemplateparameterforclassenclosing‘struct__lambda0’functionf=[](inti){returni+i;};^这是没有人知道的那些晦涩难懂的C++规则异常之一,还是GCC错误?编辑看起来像一个错误。我已经提交了bugr

c++ - 具有用户定义类成员的类的复制构造函数

我正在阅读thinkinginc++第14章:“不会自动继承的函数”classGameBoard{public:GameBoard(){cout在上面的代码中,我被Game类的拷贝构造函数和赋值构造函数搞糊涂了://YoumustexplicitlycalltheGameBoard//copy-constructororthedefaultconstructor//isautomaticallycalledinstead:Game(constGame&g):gb(g.gb){//Game(constGame&g){cout作者给出了评论:“您必须显式调用GameBoard复制构造函数,

c++ - C++ 中两个具有友元方法的类

目前我正在阅读一本关于C++的书,里面有一些练习。其中一个练习要求构建两个类,每个类都有一个友元方法。我目前的猜测是这样的:#includeusingstd::cout;usingstd::endl;classY;classX{public:voidfriendY::f(X*x);voidg(Y*y){cout但我的猜测没有编译,因为类X有voidfriendY::f(X*x);方法声明。我该如何解决这个难题?请再给我一些猜测。 最佳答案 为了将函数声明为友元,编译器必须首先看到它,而C++不允许成员函数的前向声明。因此,您尝试做的

c++ - 为什么/什么时候应该使用 C++ 中的作用域运算符在我的类之外声明方法?

我来自.Net背景,我开始学习我在教程中看到的c++here可以通过作用域运算符::在类外部定义函数的内容。这里是教程中给出的例子://classesexample#includeusingnamespacestd;classCRectangle{intx,y;public:voidset_values(int,int);intarea(){return(x*y);}};voidCRectangle::set_values(inta,intb){x=a;y=b;}intmain(){CRectanglerect;rect.set_values(3,4);cout我在谷歌上能找到的都是关

c++ - Qt 5 中的类声明和命名空间

这个问题在这里已经有了答案:wayofdefiningclassinanamespace(6个答案)关闭8年前。有什么区别:namespaceUi{classT;}classT{//somecontent};和namespaceUi{classT{//somecontent};}我使用QtCreator,第一个构造用于为QtGui应用程序生成的默认代码。在示例项目中,我有两个类:classMyDialog:publicQDialog和classMainWindow:publicQMainWindow它们中的每一个都在私有(private)部分中包含一个指向该类的指针:p>classT: