草庐IT

c++ - 为什么运算符有时是独立的,有时是类方法?

为什么有时操作符覆盖被定义为类中的方法,例如MyClass&MyClass::operatorFoo(MyClass&other){....returnthis;};有时它是一个单独的函数,比如MyClass&operatorFoo(MyClass&first,MyClass&bar)它们是等价的吗?当您以一种方式进行操作以及以另一种方式进行操作时,适用哪些规则? 最佳答案 如果您希望能够执行类似3+obj的操作,您必须定义一个自由(非成员)运算符。如果你想让你的运营商受到保护或私有(private),你必须让他们成为方法。一些运算

c++ - 具有 C++ 数据结构的 C 代码

我知道这不是开发项目的好方法,但由于我工作的某些原因,我致力于在C项目中集成C++中的一些数据结构(LRU缓存和HashMap)。到目前为止,我知道有一些方法可以使用extern"C"在C++中调用C函数,但是从C调用C++对象(方法...)呢?我正在使用GCC。 最佳答案 如果所有代码都是用C++编译器编译的,应该没有(或很少)问题。如果您使用gcc编译C并使用g++编译C++,那么您需要围绕您的类编写header包装器,以通过一组函数使C++代码可见。例子:我的类.h#ifdef__cplusplusclassMyClass{p

c++ - union 成员可能没有构造函数,但是 `std::pair` 可以吗?

union成员可能没有析构函数或构造函数。所以我不能模板化以下类Foo靠我自己MyClass如果MyClass有一个构造函数:templatestructFoo{Tval;Foo(Tval_):val(val_){}size_thash()const{union{Tf;size_ts;}u={val};returnu.s;}};structMyClass{boola;doubleb;MyClass(boola_,doubleb_):a(a_),b(b_){}};如果我这样做,我会得到这个错误:member'MyClassFoo::hash()const[withT=MyClass]::

c++ - 静态函数对类构造的好处

我见过这样的代码,所以我想找原因。使用充当构造函数而不是实际构造函数的静态函数的主要原因是什么?我的意思是:classMyClass{public:staticMyClassCreateFrom(bar);staticMyClassCreateFrom(foo);...}代替:classMyClass{public:MyClass(bar);MyClass(foo);...} 最佳答案 这被称为“命名构造函数惯用语”。通常在以下情况下使用:您有很多具有足够相似参数列表的ctors,重载的ctors会造成混淆(例如,整数和float的

C++堆或堆栈分配?

这是栈上的分配:charinStack[10];//andMyStructcl;这应该在堆中分配:char*inHeap=newchar[10];//andMyClasscl=newMyClass();如果MyClass包含一个chartest[10]变量怎么办?这样做:MyClasscl=newMyClass()...意味着MyClass::test的10字节长的内容分配在堆中而不是堆栈中? 最佳答案 会在对象内部分配,这样如果对象在堆上,数组也会在堆上;如果对象在栈上,数组也会在栈上;如果对象在可执行文件的静态内存中,数组也会在

c++ - 在 C++ 中,当我需要使用枚举时,如何避免#include 头文件?

在我的C++头文件中,我尝试使用前向声明(classMyClass;)而不是#including类头,正如许多C++编码标准(谷歌C++风格指南就是其中之一)所推荐的那样。不幸的是,当我引入枚举时,我不能再做前向声明了。像这样:////myclass1.hpp////classMyClass1{enumMyEnum1{Enum_A,Enum_B,Enum_C};};////myclass2.hpp//////Iwanttoavoidthis#include"myclass1.hpp"//I'dprefertodothis(forwarddeclaration)classMyClass1

c++ - 用 SWIG 包装模板模板参数类

我有一个如下所示的C++类:templateclassContainerType,typenameMemberType>classMyClass{public:MyClass(ContainerType*volData);}我正在尝试用SWIG包装它。我的MyClass.i看起来像:%moduleMyClass%{#include"SimpleContainer.h"#include"MyClass.h"%}%include"SimpleContainer.h"%include"MyClass.h"%template(MyClass_SimpleContainer_Int)MyClas

c++ - Clangs C++ 模块 TS 支持 : How to tell clang++ where to find the module file?

在他的talk在CppCon上,RichardSmith提到尽管ModuleTS支持目前正在进行中,但它已经可以使用了。所以我从svn构建了clang4.0,并在一个非常简单的示例上进行了尝试。在我的myclass.cppm文件中,我为int定义了一个简单的包装器modulemyclass;exportclassMyClass{public:MyClass(inti):_i{i}{}intget(){return_i;}private:int_i;};和我的main.cpp只是创建该类的一个实例,并将其保存的int输出到std::cout。#include#includeimportm

c++ - 嵌入式平台上的线程类内存分配异常

我遇到了一个奇怪的问题,我已经能够找到一些原因,但我仍然看不到原因。也许这里有人可以阐明一些想法?我在VxWorks5.5之上的PowerPC处理器上运行,使用PPCgnu604工具链在C++中开发。我有这样一个类:classMyClass{public:voidrun(void);private:CommandMesssageClasscommand;StatusMessageClassstatus;};当我的应用程序启动时,它将动态分配一个MyClass实例并生成一个指向其“运行”函数的线程。本质上,它只是坐在那里轮询命令,并在收到命令后返回状态。请注意,这是该类的简化版本。为简洁

c++ - 使用预处理器生成默认值

我正在初始化一个包含数千个设置值的非常大的数组。我希望这些值在编译时设置而不是在运行时设置,因为它们是固定的并且不会改变。有没有办法自动生成这些值,也许使用预处理器?目前我正在使用另一个小程序生成这些值,然后简单地分别复制和粘贴这些值。这是我生成的内容:classMyClass{public:MyClass(intx,inty,intz):X(x),Y(y),Z(z){}intX,Y,Z;};std::vectormy_vector{#include"my_vector_default_values.h"};my_vector_default_values.hMyClass(0,0,1