草庐IT

c++ - 为什么bool和int8_t的普通类型在C++中是int32_t?

我很好奇C++中内置bool类型的某些行为。据我了解,std::common_type使用隐式可转换性确定通用类型。我希望带有bool和另一种类型的表达式会导致bool转换为该类型。例如,我可以看到bool+float->float和bool+double->double。但是,bool+int8_t->int32_t和bool+int16_t->int32_t。为什么会这样? 最佳答案 简答:积分推广。在数值运算中,小整数类型(包括bool、char、unsignedchar、signedchar、short、unsignedsh

c++ - 向作用域枚举添加按位运算和 bool 值转换——圣诞节探索

假设我疯了,决定创造以下怪物:#include#include//Utilityproxytype-convertiblebacktoEbutalsopermitsboolconversion//foruseinconditions.////e.g.//Foof=Foo::Bar&Foo::Baz;//if(f&Foo::Baz){/*...*/}//template,void>>structEnumToBoolProxy{operatorE()const{return_val;}explicitoperatorbool(){usingUT=std::underlying_type_t

c++ - 在 bool 值上使用按位非运算符 (~) 是否会调用未定义的行为?

如果C++程序将按位非运算符(~)应用于bool值,是否会调用未定义行为?例如下面的程序是否定义明确?boolf=false;boolf2=~f;//isf2guaranteedtobetrue,oristhisUB?boolt=true;boolt2=~t;//ist2guaranteedtobefalse,oristhisUB?(是的,我知道有一个!运算符更适合这类事情;出于这个问题的目的,我们将忽略它的存在;)) 最佳答案 5.3.1/10Theoperandof~shallhaveintegralorunscopedenum

c++ - 非 bool 值的短路

缩短三元运算符的用法是否安全:process_ptr(ptr?ptr:default_ptr);短路:process_ptr(ptr||default_ptr);在C和C++中?换句话说,我们是否保证从表达式中得到eitherptrordefault_ptr,或者也许如果表达式在逻辑上为真,是否允许表达式产生任意“逻辑真”值?这是您会在整个Perl代码中看到的那种代码,但我很少在C/C++中看到它,这是我问题的原始基础。 最佳答案 第二个表达式的计算结果为1或0.引用C11标准草案:6.5.14LogicalORoperatorTh

c++ - 为什么 std::foreach 不能与 std::vector<bool> 一起使用?

这个问题在这里已经有了答案:Whyisn'tvectoraSTLcontainer?(6个答案)关闭4年前。我有以下代码片段,它采用std::vectorlist并在所有vector元素中写入一个零。此示例运行良好。#include#include#includeintmain(){std::vectorlist{1,1,2};autoreset=[](int&element){element=0;};autoprint=[](intelement){std::cout如果我将vector类型从int更改为bool,代码将无法编译。#include#include#includeint

c++ - std::array<bool> 与 std::vector<bool> 的行为

std::array实现与std::vector相同的位封装内存优化是吗?谢谢! 最佳答案 不,std::array没有bool类型的特化。您可以找到更多详细信息here,但是,基本上,std::array只是一个:anaggregatetypewiththesamesemanticsasastructholdingaC-stylearrayT[N]在bool的情况下,您可能会将其视为C风格的bool数组,而不是任何类型的位集。 关于c++-std::array与std::vector的

c++ - 识别模板中的值是 bool

这个简短的C++17程序:#includetemplatevoidoutput(Tx){ifconstexpr(std::is_integral::value){std::cout(x)有这样的输出:65isintegral1isintegral在名为output的模板函数中,如何检测到参数x是bool值而不是数字?计划是用std::cout输出值,但前提是类型是bool. 最佳答案 std::is_integral检查类型是否为以下类型之一:bool、char、char16_t,char32_t,wchar_t,short,int

c++ - 同时等待套接字和 bool var 的可移植 C++11 方法

我有一个无限循环的线程,它从套接字接收和处理数据。我希望该线程阻塞(sleep),直到数据在套接字上可供读取或“退出”bool变量变为真(由不同的线程设置)。是否有可能以一种可移植的方式做到这一点,无需轮询和使用任何第三方库(当然除了套接字库)?如果无法以可移植的方式执行操作,那么在Windows下执行此操作的最佳方式是什么(仍然没有轮询和第三方库)?示例代码:boolexit=false;//or"std::atomicexit"oranythingelsevoidfn(){SOCKETs;//initsocket,establishconnection,etcfor(;;){//T

c++ - 什么是 BOOL WINAPI 返回类型

我在C++中遇到了一个函数定义,如下所示:(source)BOOLWINAPIGetProcessMemoryInfo(_In_HANDLEProcess,_Out_PPROCESS_MEMORY_COUNTERSppsmemCounters,_In_DWORDcb);这里的返回类型是什么。是BOOLWINAPI还是BOOL?这个类型在哪里定义的? 最佳答案 BOOL是int的类型定义。WINAPI是一个宏,指定函数的调用约定(__stdcall、__cdecl等)。typedefintBOOL;#defineWINAPI__std

windows - Jenkins windows bool 参数中的 IF 语句

在安装在windows7上的Jenkins上,我选择:这个构建是参数化的添加名为WIN7的bool参数然后在Windows批处理命令中,如果选择了WIN7参数,我想做一些事情。bool值是如何转换的?我尝试了以下但没有成功IF%WIN7%=="true"()还有:echo%WIN7%正在打印true 最佳答案 IF"%WIN7%"=="true"(...)引号也是比较字符串的一部分。当比较值中有空格时,引号是必需的。 关于windows-Jenkinswindowsbool参数中的IF语