草庐IT

c++ - 我可以通过类型特征来确定指针是否为整数类型吗?

通过使用类型特征,我可以找出类型是整型还是指针(以及更多)。是否也可以查明传递的指针是整型数据类型(int、float、char)而不是对象?编辑:除了Armen's回答,如果有人使用LOKI库而不是Boost,removepointer的功能类似于TypeTraits::PointeeType 最佳答案 boost::is_pointer::value&&boost::is_integral::type>::valueBtwfloat不是整数。您可能需要is_arithmetic 关于

c++ - 确定乘法输出是否适合 64 位的最大值

这个问题在这里已经有了答案:HowdoIdetectunsignedintegeroverflow?(31个答案)关闭9年前。我有一条乘法线,可以产生大于64位值的输出。(最大我可以持有)。我想确定确定输出是否大于64位的最佳方法。我试过一些类似的东西。uint64_tval1,val2,val3;if((val1*val2*val3)>UINT64_MAX){//warningmessage}else{//dosomething}变量被初始化为一些值。

c++ - 如何确定函数参数是自动设置为默认值还是在 C++ 中显式设置?

我很确定这是不可能的,但如果以某种方式存在(可能通过编译器提供的宏),它对我来说将非常有用,所以我将它发布在这里。假设我有一个函数:voidfunc(intparam1,boolparam2=false){...}param2在这里被赋予了默认值。是否有任何机制可以确定param2是否明确设置为其默认值false还是自动传递?换句话说,从函数func中,是否可以区分以下两个调用?我正在使用MicrosoftVisualC++编译器。func(1,false);和func(1); 最佳答案 你无法区分你问的方式,但你可以这样做:voi

c++ - Atomineer:确定返回类型是否为const

我正在使用Atomineer9.00格式化我的代码注释,但我很难确定返回类型是否为const。documentation说明对于MethodReturns,使用%type%将提供完整的返回类型(给出的示例是:constint*):MethodReturnsRulesusedtogeneratethedescriptionforthereturnvaluesformethods(VBfunctions).Thefollowingspecialvariablescanbeusedinthissection:%type%Thereturntypeforthemethod(constint*)

c++ - 编写一个函数,通过判断每个参数的类型自动确定其返回值

max()中的函数header不支持不同数据类型的两个参数。所以我尝试使用template编写自己的代码和#if,#else和#endif宏。到目前为止我的代码:#includetemplate#ifsizeof(type1)>=sizeof(type2)type1max(type1a,type2b){return(a>b)?a:b;}#elsetype2max(type1,type2){return(a>b)?a:b;}#endifintmain(){inta,d;longlongb,c;std::cin>>a>>b;std::cout>c>>d;std::cout现在显然代码无效,

c# - 从 .NET 确定 C# 和 C++ 的 SLOC 和复杂性

多年来,我一直在我的项目中使用SourceMonitor来记录C#和C++组件的源代码复杂性和基本SLOC(包括注释)。这些用于向我们的客户提供外部报告,因此我无法争论它们的优缺点。我一直在研究一个存储库分析工具,它能够在任何日期/时间为我提供项目的快照View。我要添加的下一个阶段是缓存指定文件和修订的指标。我知道SourceMonitor可以编写脚本以允许我提供要测试的文件并从结果文件CSV或XML中获取指标。.NET中是否有我可以用来做同样事情的native库——例如避免生成外部进程并解析结果。我只需要以下指标:SLOC评论行数最复杂方法的复杂度最复杂方法的名称我需要在C#代码和

c++ - C++ 基类如何在运行时确定方法是否已被覆盖?

下面的示例方法旨在检测它是否已在派生类中被重写。我从MSVC得到的错误意味着试图让函数指针指向一个“绑定(bind)”成员是完全错误的,但我看不出这应该是一个问题的逻辑原因(毕竟,它将在this->vtable).是否有修复此代码的任何非hacky方法?classMyClass{public:typedefvoid(MyClass::*MethodPtr)();virtualvoidMethod(){MethodPtra=&MyClass::Method;//legalMethodPtrb=&Method;// 最佳答案 没有办法确

c++ - 虚函数是在编译期间确定的吗?

我试图查看虚函数是在编译期间确定还是在运行时确定。在寻找时我发现了一些动态链接/后期绑定(bind)但我不明白这是否意味着函数本身在可执行文件之前或可执行文件的编译过程中确定。有人可以解释一下吗? 最佳答案 对于虚函数,解析是在运行时完成的。当你有一个对象的实例时,只有在程序运行时才知道调用哪个方法的分辨率,因为只有在运行时你才知道这个实例的确切类型。对于非虚函数,这个解析可以在编译时完成,因为已知只能调用这个方法,并且不能有子类覆盖它。这也是为什么虚拟方法调用有点慢(绝对可以忽略不计但比非虚拟方法调用慢)。Thisarticle更

c++ - 从套接字接收前几个字节以确定缓冲区大小

我正在用c++使用TCP/IP和sockets编写一个分布式系统。对于我的每条消息,我需要接收前5个字节才能知道传入消息的完整长度。执行此操作的最佳方法是什么?recv()只有5个字节,然后再次recv()。如果我选择这个,假设我会在recv中得到0或5个字节(也就是不写一个循环来继续尝试)是否安全?使用MSG_PEEKrecv()一些较大的缓冲区大小,然后读取前5个字节并分配最终缓冲区。 最佳答案 您不需要知道任何事情。TCP是一种流协议(protocol),在任何给定时刻,您可以获得少至一个字节或多至数兆字节的数据。使用TCP套

c++ - 如何确定一组矩形是否包含两个具有重叠区域的矩形?

structRect{doubleleft,right,top,bottom;};std::vectorvec;现在我们有N(N>1000)个矩形,判断其中任意两个是否重叠的有效算法是什么?更新:所有这些矩形都平行于坐标系。 最佳答案 您可以用两个线段表示一个矩形:开线段(x1,y1)到(x1,y2)和闭线段(x2,y1)到(x2,y2),其中x1首先,我们可以在O(nlogn)时间内根据其x坐标对所有这些段进行排序。其次,我们逐个处理每个段,如果我们遇到一个开放段,我们将该段的interval(y1,y2)添加到intervalt