草庐IT

true_false

全部标签

c++ - 在 C++ 中将 bool (false) 转换为合法的指针吗?

我最近偶然发现了一些奇怪的东西:将bool值转换为指针在VisualStudio2013和2015中有效,但在GCC和Clang中无效(在3.5中尝试过)。#includeusingnamespacestd;voidfoo(int*ptr){std::coutGCC中的错误:main.cpp:Infunction'intmain()':main.cpp:13:13:error:cannotconvert'bool'to'int*'forargument'1'to'voidfoo(int*)'foo(false);^我的猜测是false被转换为0,相当于NULL。用foo(true)替换

c++ - 将 true/false 分配给 std::string:这是怎么回事?

我在我的源代码上测试了一个c++11编译器,它在我的一个函数中发现了一个错误,我本来希望我的非c++11编译器也能捕捉到这个错误。我从一个返回类型为std::string的函数返回false......这是演示问题的代码#includeintmain(){std::stringstr=false;std::cerr我很惊讶这段代码编译没有问题。我从异常描述中怀疑是编译器将false转换为0,然后转换为NULL,并将其用作char*来尝试构造字符串。但是,当我将false切换为true时,我得到的结果如下:$g++test.cpp-W-Wall-Wextratest.cpp:Infunc

c++ - 在某些情况下,std::is_floating_point 为 float 返回 false

在某些情况下,请参见下面的一个示例,std::is_floating_point正在返回false对于float.#include#include#includeintmain(){::std::cout()[::std::vector().size()])).name()()[::std::vector().size()])>::value){::std::cout来自GCC的输出fnotfloatingpoint在本例中,可以看到typeid认为::std::vector()[::std::vector().size()]作为float因为它返回正确的名称。还可以检查typeid(

c++ - 为什么 C++ bool var 默认为 true?

bool"bar"默认为true,但应该为false,不能在构造函数中初始化。有没有办法在不使其静态的情况下将其初始化为假?简化版代码:foo.hclassFoo{public:voidFoo();private:boolbar;}foo.cFoo::Foo(){if(bar){doSomethink();}} 最佳答案 其实默认情况下根本没有初始化。你看到的值只是内存中一些已经被分配使用的垃圾值。如果你想设置一个默认值,你必须在构造函数中请求它:classFoo{public:Foo():bar(){}//defaultboolv

c++ - 等于在 C++ 中返回 false

我对cpp还很陌生,我正在尝试做一个项目。它说代码必须以文件名作为参数,并将由以下人员运行:./main-ifilename我编写了一个for循环,它将遍历参数列表以找到“-i”参数,以便确定文件名。但是这一行总是返回false:argv[i]=="-i"下面是我的代码:#include#includeintmain(intargc,char*argv[]){std::stringtest=argv[0];for(inti=0;i 最佳答案 argv[i]=="-i"在上面的行中,您比较了两个指针:分别为char*和constcha

c++ - 关于在丢弃的 if constexpr(false) 语句中实例化模板时,编译器之间的行为不一致

我试图了解下面的代码段是否应该根据标准编译。当我尝试使用三个主要编译器的最新版本进行编译时,会出现以下情况:✓Clang(版本7.0.0,带有-std=c++17标志):编译良好;✓GCC(8.2版,带有-std=c++17标志):也可以正常编译;❌MSVC(版本19.16,带有/std:c++17标志):编译器错误(见下文)。出现错误是因为MSVC编译器似乎试图实例化std::optional尽管代码被丢弃。GCC和Clang似乎没有这样做。标准是否明确定义了在这种情况下应该发生什么?#include#includetemplatestructBar{voidfoo(Args...a

c++ - 如何使用 boost::lexical_cast 和 std::boolalpha?即 boost::lexical_cast< bool > ("true")

我已经看到其他boost::lexical_cast问题的一些答案,这些问题断言以下是可能的:boolb=boost::lexical_cast("true");这不适用于g++4.4.3boost1.43。(也许它确实适用于默认设置std::boolalpha的平台)This是字符串到bool问题的一个很好的解决方案,但它缺少boost::lexical_cast提供的输入验证。 最佳答案 除了答案形式poindexter之外,您还可以将here中的方法包装起来。在boost::lexical_cast:的特殊版本中namespa

c++ - false 和 FALSE 有什么区别?

在许多程序中,我看到带有标识符FALSE和false的语句。在C++的上下文中它们之间有什么区别吗?在某些程序中,我还看到了bool和某处BOOL。这两者有什么区别?谁能向我解释这些标识符之间的区别?谢谢。 最佳答案 如果您已包含windows.h,然后FALSE#定义为0。TRUE#defined为1。它不是boolean类型,它是整数类型。Windows还定义了类型BOOL,它实际上是一个整数类型,旨在容纳TRUE的值和FALSE.windows.h中的相关代码段看起来像这样:#ifdefFALSE#undefFALSE#end

c++ - 为什么使用 'function address == NULL' 而不是 'false' ?

浏览一些遗留代码我发现了这样的功能:staticinlineboolEmptyFunc(){return(void*)EmptyFunc==NULL;}和这个有什么区别:staticinlineboolEmptyFunc(){returnfalse;}创建此代码是为了在几个不同的平台下编译,例如PS2、Wii、PC...有什么理由使用第一个函数吗?喜欢更好的优化或避免一些奇怪的编译器错误行为? 最佳答案 两个函数在语义上是相同的:它们总是返回false*。标准完全允许将第一个表达式折叠为常数值“false”,因为它不会改变任何可观察

javascript - 什么原因/*全局模块: false*/in grunt. js

许多grunt.js脚本以:/*globalmodule:false*/module.exports=function(grunt){但是第一行注释的原因是什么? 最佳答案 它是JSLint或JSHint的指令。它告诉JSLint/JSHint解析器标识符module是在别处定义的,因此它不会抛出错误,告诉您module未定义。没有它,解析器将遇到对module的引用,并认为您正在尝试引用undefinedvariable。来自JSLintdocs:JSLintalsorecognizesa/*global*/directiveth