草庐IT

grunt-express

全部标签

c++ - 将 Visual C++ Studio/Express 设置为严格的 ANSI 模式

我通常在Linux下使用gcc和-ansi标志进行编程和编译;但我一直被迫在VisualC++中工作,每当我编译我的C代码时,我都会收到所有Microsoft警告,如'fscanf':Thisfunctionorvariablemaybeunsafe.Considerusingfscanf_sinstead.尽管在MSDN开发者网站上执行了一些用于设置ANSIC项目的步骤,但我还是得到了这些,但所有_s(“安全”)调用都不是ANSIC!关于将VisualC++Studio置于严格的ANSI-only模式有什么建议吗?谢谢。 最佳答案

c++ - 除以零预防 : Checking the divisor's expression doesn't result in zero vs. 检查除数不为零?

由于减法中的浮点错误,在以下情况下是否可以被零除?floatx,y,z;...if(y!=1.0)z=x/(y-1.0);换句话说,下面是不是更安全一些?floatdivisor=y-1.0;if(divisor!=0.0)z=x/divisor; 最佳答案 假设IEEE-754float,它们是等价的。FP算法的一个基本定理是,对于有限的x和y,x-y==0当且仅当x==y,假设逐渐下溢。如果次正规结果被刷新为零(而不是逐渐下溢),则只有当结果x-y是正规的时,这个定理才成立。因为1.0的缩放比例很好,所以y-1.0永远不会低于正

c++ - 使用 "Error: expression must have a pointer type"关键字时为 "this"

所以我创建了一个父类,我称之为Parent,它有一个Square*网格成员变量。grid变量是一个指向大型Square数组的指针,其中包含key成员变量。(将此项目视为哈希表)问题是我在Parent类中创建一个函数,该函数编辑Square数组中的关键变量,但出现错误。这行代码编译:this->grid=newSquare[row*col];但是这一行不编译:this->grid[i*col+j]->key1=j;它在this下划线并表示表达式必须具有指针类型。我想知道是否有人知道我可能做错了什么?voidParent::initialize(introw,intcol){this->g

c++ - 'comparison between signed and unsigned integer expressions' 真的会导致错误吗?

通常我使用的对象会有(有符号的)int参数(例如intiSize),这些参数最终会存储某物应该有多大。同时,我经常将它们初始化为-1以表示对象(等)尚未设置/尚未填充/尚未准备好使用。当我执行类似if(iSize>=someVector.size()){...}的操作时,我经常以警告结束comparisonbetweensignedandunsignedinteger.因此,名义上我不想使用unsignedint。在任何情况下这会导致错误或意外行为吗?如果不是:处理此问题的最佳方法是什么?如果我使用编译器标志-Wno-sign-compare我可能(假设地)错过我应该使用unsigne

c++ - "lambda expressions"有什么好处?

lambda表达式的原因是以“更方便的方式”隐式生成函数对象。正如您从下面的示例中看到的那样,它不仅不太方便且较长,而且语法和符号也令人困惑。它是否有任何用途,它实际上使代码更具可读性?cout(x)) 最佳答案 它更具可读性,因为它将函数的实现放在调用它的地方,从而保持自然的从上到下的代码流不变。你看,普通功能各有利弊。一方面,函数有助于减少代码中的重复,这使代码更加结构化和可读性更强。另一方面,函数打破了代码的自然流并将控制权转移到一个完全不同的位置。由于相当明显的原因,这会降低可读性:这就像读一本充满嵌套的前向和后向引用的书。

Visual Studio Express 2015 中的 C++ 新文件问题

我在VisualStudioExpress2015中遇到一个特殊问题。我正在尝试在VisualC++中创建一个新的空Win32控制台应用程序项目。我可以创建一个新项目,清除预编译头和SDL检查的复选框,并选中“空项目”复选框。项目已创建,但当我向源文件添加新项目时,在“已安装”下没有任何选择。在以前的版本中,我可以选择一个新的空白C++(.cpp)文件或一个header(.h)文件。我可以在VisualBasic下创建新的.vb文件,在C#下创建新的.cs文件,但是当我尝试创建一个新的C++文件时,“添加”按钮是灰色的。有人有什么想法吗?我已经在三台不同的计算机上安装了它,结果相同(所

c++ - 复制省略 : move constructor not called when using ternary expression in return statement?

考虑以下示例:#includeclassobject{public:object(){printf("constructor\n");}object(constobject&){printf("copyconstructor\n");}object(object&&){printf("moveconstructor\n");}};staticobjectcreate_object(){objecta;objectb;volatileinti=1;//With#if0,object'scopyconstructoriscalled;otherwise,itsmoveconstructor

c++ - 错误 : Expression must have integral or unscoped enum type

#include#include#include#include#includeusingnamespacestd;intmain(){floatsize;floatsumNum=0;floatmaxNum,minNum;floatmean;floattotalDev=0;floatdevSqr=0;floatstdDev;//Createauserinputsizestd::cout>size;float*temp=newfloat[size];//Gettinginputfromtheuserfor(intx=1;x>temp[x];}//Outputofthenumbersins

c++ - '&' : illegal operation on bound member function expression

这个问题在这里已经有了答案:Printaddressofvirtualmemberfunction(5个答案)关闭7年前。当我尝试从具有主要功能的单个cpp文件时,这有效,sprintf(smem_options,"#transcode{vcodec=RV24}:smem{""video-prerender-callback=%lld,""no-time-sync},",(longlongint)(intptr_t)(void*)&cbVideoPrerender);如何在类中将函数参数传递给sprintf?sprintf(smem_options,"#transcode{vcodec

c++ - 使用模板时得到 "cannot appear in a constant-expression"

templateclassCAT{};intmain(){inti=10;CATcat;return0;//hereIgoterror:‘i’cannotappearinaconstant-expression}甚至inti=10;constintj=i;CATcat;//thisstillcannotwork但我已经将i转换为constint,为什么编译器仍然报错?我的平台是ubuntu,gcc版本4.4.3谢谢,==============感谢大家的意见,但在某些情况下,我需要一个非常量变量,例如://alloperations.henumOPERATIONS{GETPAGE_FR