草庐IT

true_false

全部标签

c++ - 为什么 boost::is_same<int const&, boost::add_const<int &>::value 等于 false?

我正在处理"C++TemplateMetaprogramming"byAbrahams&Gurtovoy“这实际上不在第二章中,而是我在做第一个练习(2.10、2.0)时尝试过的,这让我很困惑:#include#includestd::stringdisplay(boolb){return(b?"true":"false");}intmain(){usingnamespacestd;cout::type>::value)输出为“假”。但是,如果我删除引用,即“intconst”和“int”。输出为“真”。 最佳答案 如果你用指针尝试

c++ - ASSERT_TRUE() 返回类型与 gtest 中的函数类型不匹配

当我使用Gtest中提供的ASSERT_TRUE()时,出现以下错误。返回类型与函数类型不匹配,在VS2010.中带有下划线。abc.h#include"gtest\gtest.h"classabc{pubilc:boolfun();private:boolfun1();};abc.cboolabc::fun(){ASSERT_TRUE(fun1());//Gettingerror:returntypedoesnotmatchfunctiontype}boolabc::fun1(){returntrue;//Trueorfalsedepandingonoperation}

c++ - 将 true 重新定义为 false 时的预期输出是什么,反之亦然?

#include#definetruefalse#definefalsetrueintmain(){std::cout为什么会输出“01”? 最佳答案 正如JerryCoffin所指出的,您不能定义一个名称为关键字的宏。但是,我们可以考虑另一个具有明确定义的行为和相同结果的类似示例。考虑:intTRUE=1;intFALSE=0;#defineTRUEFALSE#defineFALSETRUEstd::cout当您使用FALSE时,它被识别为宏FALSE并被该宏的替换列表替换,这是单个标记,TRUE。然后,该替换将被重新扫描以替换更

c++ - "true;"或 "10;"语句在 C++ 中意味着什么?如何使用它?

在C++中,可以编写以下任何语句:10;true;someConstant;//ifthisisreallyanintegerconstant或者类似的东西intresult=obtainResult();result;//lookstotallyuseless如果在某些配置中扩展为空字符串的宏稍后与result变量。像这样:intresult=obtainResult();result;assert(result>0);//assertisoftenexpandedintoanemptystringinReleaseversionsofcode这样的陈述是什么意思?除了编译器警告抑制

c++ - 无论如何有一个 valgrind 消息 "Conditional jump or move depends on uninitialized value"可以是所谓的 'false positive'

我在这里找到的大多数问题都提供一段代码,并由指出实际错误的人回答。我的问题是关于一般未初始化值的条件跳转。我可以理解,如果确定此分配仅完成一次并且在程序的生命周期内可能需要,则不必在程序结束时清理一block内存。据我所知,当程序终止时,GType系统会留下大量未释放的内存。这些未释放的block可以被视为“误报”。但是“有条件的跳跃或移动未初始化的值”会是误报吗?我唯一能想出的是有人通过读取随机地址来实现(坏的)随机函数(其中随机地址本身是棘手的部分;)。另一个例子可能是硬件映射到内存的一部分然后被读取,但这主要是由驱动程序而不是由普通用户应用程序完成的。是否有任何其他示例(最好是C

c++ - 符合标准的编译器应该能够优化这些指针比较中的哪一个 "always false"?

为了更好地理解指针别名不变量在优化过程中的表现,我pluggedsomecodeintotherenownedCompilerExplorer,我将在这里重复:#includeboola(int*foo,int*bar){(void)*foo,(void)*bar;returnfoo==bar;}boolb(int*foo,float*bar){(void)*foo,(void)*bar;returnfoo==reinterpret_cast(bar);}boolc(int*foo,int*bar){(void)*foo,(void)*bar;//It'sundefinedbehavi

c++ - false 隐式转换为空指针

是否允许false隐式转换为指针,clang++和g++不同:g++-4.8:不管有没有-std=c++11总是一个警告clang++(主干):如果没有-std=c++11则警告,如果有-std=c++11则错误所以有人知道为什么g++和clang++的行为不同,谁是正确的?C++标准(C++03和C++11)中的哪些段落谈到了这种情况。谢谢。[hidden~]$catb.cppconstchar*f(){returnfalse;}[hidden~]$g++-cb.cppb.cpp:Infunction‘constchar*f()’:b.cpp:1:26:warning:convert

c++ - 将 false 转换为指针类型 void*?

谁能给我解释一下这是怎么回事...?我有这段代码:#include#include#includeintmain(){std::ifstreamfile("test.txt");std::stringx;while(true){if(!(file>>x))return0;std::cout...编译正常,做它应该做的,到目前为止没问题。有时候我不太喜欢!,因为它很容易被忽略,所以我把if换成了if((file>>x)==false)return0;..突然我的编译器(gcc4.8.5)发出警告:warning:converting‘false’topointertype‘void*’[

c++ - 是否可以在C++标准库中实现always_false?

有些情况下会使用always_falsehelper,例如无条件的原因static_assert如果尝试实例化某些模板失败:templatestructalways_false:std::false_type{};templatestructUsingThisShouldBeAnError{static_assert(always_false::value,"Youshouldnotusethis!");};这个助手是必要的,因为模板定义必须(至少在理论上)具有至少一组模板参数,可以为这些参数生成有效的特化以使程序格式良好:[temp.res]/8:Theprogramisill-fo

c++ - 为 "while(true)"发出编译器警告而不为 "for(;;)"发出警告有什么意义?

当我使用带有“警告级别4”的VisualC++9编译C++代码时,出现以下情况:while(true){//loopbodywithbreakoncertaincondition}以及以下内容:for(;true;){//sameloopbody}两者都触发C4127:conditionalexpressionisconstant警告,但以下内容:for(;;){//sameloopbody}编译时没有警告。为什么会有这种差异,尤其是在第二个和第三个变体之间? 最佳答案 警告用户常量条件表达式的原因是为了帮助避免表达式最终变为常量的