这个问题在这里已经有了答案:WhyisthereanimplicittypeconversionfrompointerstoboolinC++?(3个答案)关闭5年前。我有以下代码:#include#includevoidfoo(boola){std::cout执行时我得到这个输出:bool我期望的输出是:string为什么g++4.9将此字符串隐式转换为bool?
我寻找g++的警告编译标志,它会阻止从bool到double的静默转换。Thisanswer涉及将int转换为double的更广泛问题。这个问题在那里被驳回了,因为它被认为是无损转换并且完全合法。但是,由于bool具有不同于简单整数的另一种语义含义,我希望从bool到double的隐式转换会发出警告。我试过:-Wall-Wextra-pedantic-Wconversion在以下代码上没有任何成功(没有发出警告):#includeintfoo(doublevar){returnstatic_cast(var);}intmain(){std::cout我使用g++4.9.2,但是建议使用
我只是试图制作一个比较2个对象的函数,但它给了我:Error:boolDuree::operator==(constDuree&,constDuree&)musttakeexactlyoneargument我该如何解决这个问题?谢谢。杜里.h#ifndefDEF_DUREE#defineDEF_DUREEclassDuree{public:Duree(intheures=0,intminutes=0,intsecondes=0);boolestEgal(Dureeconst&b)const;booloperator==(Dureeconst&a,Dureeconst&b);privat
此表单无法使用我的VS2008编译器进行编译。应该可以吗?#includeusingnamespacestd;intgetvalue(){return3;}intmain(intargc,char*argv[]){if((intval=getvalue())==3)cout这个表格确实有效。...intval;if((val=getvalue())==3)...为什么不起作用? 最佳答案 这是不合法的,因为你不能将语句用作表达式。因此,不是在if中声明变量是非法的,而是比较。就像:(intx=3)==3;是非法的,而intx=3;x
从下面的代码片段中我得到函数的地址是1。为什么?#includeusingnamespacestd;intadd(intx,inty){intz;z=x+y;cout 最佳答案 函数指针不能转换为数据指针。如果您尝试将一个分配给void*,则会出现编译器错误。多变的。但它们可以隐式转换为bool!这就是为什么booloperator过载在constvoid*上选择一个。要强制执行所需的重载,您需要使用非常强大的C++转换,这将几乎完全忽略静态类型信息。#includeusingnamespacestd;intadd(intx,int
以下代码在VisualStudio2017中使用MSVC编译器编译,但在GCC或Clang中编译失败。#include#includevoidfunctionTest(std::function){std::cout要解决这个问题,我们可以像这样使用enable_if:#include#includevoidfunctionTest(std::function){std::cout::value>::type>voidfunctionTest(BOOL_TYPE){std::cout或者我可以通过引入用户类型而不是bool来消除歧义(如果构造函数存在歧义问题,您需要这样做):#incl
如果bool()运算符重载,构造函数调用是否可以评估为bool值?classA{public:A(){};operatorbool()const{returntrue;}}main(){if(Aa=A()){//dostuff}}上面的代码是否有效,或者我是否需要像这样实现main:intmain(intargc,constchar*argv[]){Aa();if(a){//dostuff}}这段代码将在我的代码库中到处都是,因此减少行数、提高易读性和缩小范围很重要,并且会因此得到改进。有什么想法吗? 最佳答案 该代码包含一些句法和
我想在bool上下文中评估某个类的实例。或者更清楚地说,我想定义对象在bool上下文中直接使用时的react。这里有一个例子:classFoo{intstate;Foo():state(1){}boolcheckState(){return(state>=0);}voiddoWork(){/*blahwithstate*/}};intmain(){Fooobj;//while(obj.checkState())//thisworksperfectly,andthatswhatiindenttodo!while(obj)//thisiswhatwanttowriteobj.doWork(
在类中声明operatorstd::string时,operatorbool()怎么会导致错误,而且它本身还充当到string的隐式转换?#include#includeusingnamespacestd;classTest{public:operatorstd::string(){cout 最佳答案 您面临的问题(除了operatorstd::string()返回bool之外)是隐式转换在您需要和不需要时触发。当编译器看到s=t时,它会识别以下潜在的std::operator=匹配项://usingstd::stringforco
用VisualC++编程时,我想每个开发者都习惯于看到警告warningC4800:'BOOL':forcingvaluetobool'true'or'false'不时。原因显然是BOOL被定义为int并且直接将任何内置数值类型分配给bool被认为是一个坏主意。所以我现在的问题是,给定任何要解释为boolean值的内置数字类型(int、short、...),将这个值实际存储到变量中的/您的首选方式是什么类型bool?注意:虽然混合使用BOOL和bool可能不是一个好主意,但我认为无论是在Windows还是其他地方,这个问题都不可避免地会出现,所以我认为这个问题既不是Visual-C++