草庐IT

readability-implicit-bool-convers

全部标签

c++ - 为什么 std::vector<bool> 没有 .data()?

std::vector的特化,如C++1123.3.7/1中所述,不声明data()成员(例如提到here和here)。问题是:为什么std::vector没有.data()?这与为什么bool的vector是同一个问题。s没有连续存储在内存中。不这样做有什么好处?为什么可以将指针指向bool的数组?不退吗? 最佳答案 Whydoesastd::vectorhaveno.data()?因为std::vector在1个字节中存储多个值。把它想象成一个压缩存储系统,其中每个boolean值都需要1位。因此,不是每个内存块有一个元素(每个

c++ - 为什么带引号的字符串在 std::string 之前匹配 bool 方法签名?

给定以下方法://Method1voidadd(conststd::string&header,boolreplace);//Method2voidadd(conststd::string&name,conststd::string&value);看起来下面的代码最终会调用方法1而不是方法2:something.add("Hello","World");我最终创建了另一个方法,如下所示://Method3voidMyClass::add(constchar*name,constchar*value){add(std::string(name),std::string(value));}

c++ - 使用 bool 值 vector 是否比动态位集慢?

使用bool值vector是否比动态位集慢?我刚刚听说了boost的动态位集,我想知道它是否值得麻烦。我可以只使用bool值vector吗? 最佳答案 这很大程度上取决于您使用的bool值的数量。bitset和vector通常都使用打包表示,其中bool值仅存储为单个位。一方面,这会以位操作的形式施加一些开销来访问单个值。另一方面,这也意味着更多bool值将适合您的缓存。如果您使用大量bool值(例如,实现埃拉托色尼筛),将更多的bool值放入缓存中几乎总能获得净yield。内存使用量的减少将比位操作损失更多。反对std::vect

c++ - 按字符串对 std::vector<std::pair<std::string,bool>> 进行排序?

我如何通过比较pair.first这是一个std::string来对这个vector进行排序?(不提供静态比较功能,也不使用boost)。 最佳答案 std::vector>v;std::sort(v.begin(),v.end());std::pair过载operator首先按first排序元素然后由second元素。因此,如果您只是对vector进行排序使用默认排序顺序(operator),您将获得所需的顺序。 关于c++-按字符串对std::vector>进行排序?,我们在Stac

c++ - 我应该使用 "int"还是 "bool"作为 C++ 中的返回值?

如果我有一个执行某些过程的函数,然后需要返回某事物的真值,是否有令人信服的理由使用bool变量或int变量作为返回类型?boolFoo(){......returntruthValue;}intFoo(){......returntruthValue;}这两个函数之间有明显区别吗?两者都有哪些潜在的陷阱和优势?谢谢,核磁共振 最佳答案 如果它是一个真正的真值,那么你应该使用bool值,因为它让调用者非常清楚将返回什么。返回int时,可以将其视为代码/枚举类型值。无论是函数名、参数名和类型,还是返回码的类型,代码都应该尽可能的清晰明确

c++ - 将 bool 和 int 的引用与 MSVC 2015 进行比较时发出警告

以下代码使用MSVC(2015更新3)生成警告-使用/W4:constbool&a=true;constint&b=1;if(a==b)C4805:“==”:“constbool”类型和“constint”类型在操作中的不安全混合但没有引用它可以干净地编译。constboola=true;constintb=1;if(a==b)为什么?编辑:也只是在没有const的情况下测试过boola=true;intb=1;if(a==b)警告再次出现...编辑2:在Debug中编译...我确实不得不在constnoref情况下使C4127:conditionalexpressionisconst

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++ - 你可以在 C++ 中按位移动 bool 值吗?

我正在使用其他人的代码,该代码是用较旧的编译器编写的,该编译器映射了一个特殊的BOOL输入unsignedint,但在我的编译器中它被映射到一个真正的bool.在他的代码中的某些地方,他使用了位移运算符在booltype,这是我以前从未见过的,当我的编译器没有提示时,我感到很惊讶。那是有效的C++吗?bool自动晋升为int或uint?我看到了thisrelatedquestion,这为另一个问题提供了一些清晰度,但它没有解决移位运算符。 最佳答案 来自移位运算符[expr.shift]Theoperandsshallbeofint

c++ - 警告 : overflow in implicit constant conversion

在下面的程序中,第5行确实按预期给出了溢出警告,但令人惊讶的是,第4行在GCC中没有给出任何警告:http://www.ideone.com/U0BXnintmain(){inti=256;charc1=i;//line4charc2=256;//line5return0;}我在想这两行都应该给出overflow警告。还是我缺少什么?我做这个实验的主题是:typedeftypechecking?在那里我说了以下内容(我从答案中删除了,因为当我运行它时,它并没有像我预期的那样显示)://However,you'llgetwarningforthiscase:typedefintT1;ty

c++ - 使 : implicit rule to link c++ project

我正在学习制作教程。我正在尝试构建的非常简单的测试项目只有3个文件:./src/main.cpp./src/implementation.cpp和./include/header.hpp这是制作文件。VPATH=srcincludeCPPFLAGS=-Iincludemain:main.oimplementation.omain.o:header.hppimplementation.o:header.hpp在不带任何参数的情况下调用ma​​ke仅构建目标文件,但不链接可执行文件。prog应该有一个隐含的规则,或者我错过了什么?我真的需要有人为我指明正确的方向。谢谢。我使第一个目标名称与