草庐IT

c++ - 如何检查流提取是否消耗了所有输入?

在下面的函数中,我尝试查看一个字符串s可转换为T类型通过查看我是否可以读取类型T,如果输入在之后被完全消耗掉。我要templateboolcan_be_converted_to(conststd::string&s,T&t){std::istringstreami(s);i>>std::boolalpha;i>>t;if(iandi.eof())returntrue;elsereturnfalse;}然而,can_be_converted_to("true")计算结果为假,因为i.eof()在函数结束时为false。这是正确的,即使该函数已经读取了整个字符串,因为它没有尝试读取过去字符

c++ - 为什么 bool 看起来占用的内存和 int 一样多? C++

当我在devcpp运行这个程序时,任务管理器说它大约有79MB。使用gnuc++4.7的Codeforces说它是79112KB#includeconstintN=10010,K=1010;structTPos{intcharge;boolex;TPos(){charge=1但是当exparametr被注释时:#includeconstintN=10010,K=1010;structTPos{intcharge;//boolex;TPos(){charge=1只有39536KB。我认为boolean值应该使用一个字节。为什么它的大小增加了一倍? 最佳答案

c++ - 为什么 ~(true^true) 不是真的? boolean 运算符(否定)适用于 `unsigned char` s,但不适用于 boolean 值? (C++)

我听说通常除了0之外的“一切”都是真的。但是现在我身上发生了非常奇怪的事情……或者我只是认为我以正确的方式做事,而我却没有。这是正在发生的事情:当我想检查a是否等价于b时,我可以使用NOT(aXORb)。当我检查unsignedchar时,一切正常,例如unsignedchara=5;unsignedcharb=3;unsignedcharc=~(a^b);给我c==249:a是:00000101,也就是5。b是:00000011,也就是3。~(a^b)是:11111001,即249。现在,让我们用bool来试试这个。cout这让我在控制台中:-1-2-2-10110false虽然我希

c++ - 二元 boolean 运算符是否具有结合性?

语言定义的a&&b&&c是指(a&&b)&&c还是a&&(b&&c)?哇,Jerry真快。为了加强这个问题:它真的重要吗?a&&b&&c被解释为(a&&b)&&c或a&&(b&&c)之间会有明显的区别吗>? 最佳答案 §5.14/1:“&&运算符从左到右分组。[...]与&不同,&&保证从左到右评估:如果第一个操作数为假,则不评估第二个操作数。”至于何时或如何重要:我不确定它是否真的适用于内置类型。但是,有可能以使其变得重要的方式重载它。例如:#includeclassA;classM{intx;public:M(intx):x(x

c++ - 数组 C++ 中每个 boolean 值 1 位

boolfp[81];根据我的理解,fp应该使用ceil(81/8)字节,因为它是连续的。我说的对吗?我怎样才能证明这一点? 最佳答案 不,缓冲区的大小是实现定义的。请引用以下标准中的引述。因此,您可以期望的大小是81*X,其中X是bool的大小,它是实现定义的。$5.3.3/1-“sizeof运算符产生其操作数的对象表示中的字节数。操作数是一个未计算的表达式,或者是带括号的类型ID。sizeof运算符不应应用于具有函数或不完整类型的表达式,或在声明其所有枚举数之前应用于枚举类型,或应用于此类类型的括号名称,或应用于指定的左值一个位

c# - 按位或 : C# versus C++

)。假设您有两个整数,a=8,b=2。在C++中a|b是真的。我使用该行为来处理标志集合。例如,标志将是1、2、4、8等,并且它们的任何集合都是唯一的。我找不到如何在C#中执行此操作,因为|和&运算符的行为不像在C++中那样。我阅读了有关C#运算符的文档,但我仍然不明白。编辑:不幸的是,我好像把事情搞砸了。以这段代码为例:byteflagCollection=8;byteflag=3;if((flag|flagCollection)!=0)MessageBox.Show("y");elseMessageBox.Show("n");无论我在标志中输入什么值,这都会返回“y”。这是显而易见

c++ - 如何在 C++ 中获取 bool 变量的相反值

对我来说,boolean变量表示true或false。一些boolean变量被定义并初始化为我们未知的值。我只想得到它的相反值。我应该如何在C++中执行此操作? 最佳答案 只需使用!运算符:boolx=//somethingbooly=!x;//Gettheopposite. 关于c++-如何在C++中获取bool变量的相反值,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/808

c++ - boolean 运算符++和——

今天,在编写一些VisualC++代码时,我遇到了一些让我感到惊讶的事情。似乎C++支持bool的++(递增),但不支持--(递减)。这只是一个随意的决定,还是背后有某种原因?编译:staticHMODULEhMod=NULL;staticboolonce=false;if(!once++)hMod=LoadLibrary("xxx");这不是:staticHMODULEhMod=NULL;staticboolonce=true;if(once--)hMod=LoadLibrary("xxx"); 最佳答案 它来自使用整数值作为bo

c++ - 编译器是否应该将 bool 中的任意非零值正确解释为 true?

对于真值,boolean值应该转换为1,否则为0。然而,这并没有说明它们实际上是如何存储在内存中的。如果我在bool中存储一个任意的非零值会发生什么?在将这些转换为整数时,标准是否保证正确的行为?例如,给定以下程序,#includeintmain(){boolb;memset(&b,123,sizeof(b));returnb;}标准是否保证程序会返回1? 最佳答案 不,在memset之后从bool中读取是(至少,见下文)未指定的行为,因此无法保证将返回什么值。结果可能是在特定的架构中,bool的值表示仅包含高位,在这种情况下,通过

c++ - 矩形多边形的 boolean 运算

Avast各位程序员!我有以下问题:我有两个矩形重叠,如下图所示。我想找出由点ABCDEF组成的多边形。替代的圣诞节描述:红色曲奇刀正在切掉一点黑色曲奇。我要计算黑cookies。每个矩形都是一个具有4个2d顶点的数据结构。实现此目标的最佳算法是什么? 最佳答案 这是一般二维多边形裁剪的特例。Weiler-Atherton算法是一个不错的起点。Wikipediahasasummary和linkstotheoriginalpaper.该算法似乎与您描述的数据结构非常匹配。请注意,您很可能最终会得到一个带有孔的矩形(如果红色完全在黑色内