草庐IT

if-elseif-else

全部标签

c++ - 在 if 语句中,cin 如何计算为真?

我认为:if(true){executethisstatement}那么if(std::cin>>X)如何当没有什么“真实”的时候执行为真?如果是if(x我能理解或if(y[operator]x),但"istream=true"是什么样的逻辑? 最佳答案 答案取决于标准C++库的版本:在C++11之前,if中的转换依赖于使用operatorvoid*将流转换为void*从C++11开始,转换依赖于operatorboolstd::istream的请注意,std::cin>>X不仅是语句,还是表达式。它返回std::cin。“链接”输

c++ - 使用条件 if else 运算符初始化引用变量

以下C++无效,因为引用变量需要初始化器:int&a;//illegalif(isfive){a=5;}else{a=4;}但是,MSVC似乎认为这样没问题:int&a=isfive?5:4;这对我来说意味着MSVC实际上将条件运算符视为单个表达式,而不是将其扩展为if-else语句。使用条件运算符初始化引用是否总是有效的C++? 最佳答案 三元运算符不会扩展为if-else结构(不是根据语言,实现可能会生成等效的二进制文件,但在语言级别它们是不同的)。所以下面的代码是有效的:intfour=4,five=5;int&r=condi

c++ - 查找表与 if-else

今天,我阅读代码时使用查找表而不是if-else来裁剪两个求和的uint8值。映射在i={0...255}中为i,在i={256...511}中为255。我想知道这样做的yield有多大,并尝试使用gprof找出它,g++-std=c++0x-pgperfLookup.cpp-O2-operfLookup&&./perfLookup&&gprofperfLookup|less下面附上代码。现在没有-O2标志,gprof表示lookup()占用执行时间的45%,而ifelse()占用执行时间的48%。对于-O2,lookup()为56%,ifelse()为43%。但这个基准真的正确吗?也

c++ - "if (getline(fin, str)) {}"是否符合C++11标准?

我检查了C++11标准,发现了以下事实:std::getline(fin,str)返回一个basic_ios对象,其类有一个成员函数explicitoperatorbool()const;basic_ios类没有成员函数operatorvoid*()const;作为C++11之前的版本。所以,我认为if(getline(fin,str)){}不符合标准。应该写成if(bool(getline(fin,str)){}。(但是,VC++2012对此用法给出警告。即强制void*为bool)我说的对吗? 最佳答案 代码是一致的。当对象自动

c++ - 为什么有些 STL 算法提供额外的 '_if' 函数而不是重载?

这个问题在这里已经有了答案:Whydoesthestandardlibraryhavefindandfind_if?(4个答案)关闭7年前。为什么一些STL算法提供额外的'_if'函数而不是重载它?//example:find(beg,end,val);find_if(beg,end,pred);难道他们不能只重载这些算法而不是创建额外的_if函数吗?

c++ - 我刚刚了解了 C++ 函数;我可以在函数返回值上使用 if 语句吗?

我对isNumPalindrome()函数感到困惑。它返回true或false的bool值。我应该如何使用它,以便我可以显示它是否是回文。对于前。if(isNumPalindrome==true)cout#include"stdafx.h"int_tmain(intargc,_TCHAR*argv[]){return0;}#include#includeusingnamespacestd;intaskNumber();boolisNumPalindrome();intnum,pwr;intmain(){askNumber();return0;}boolisNumPalindrome()

c++ - remove_if and then erase 在 vector 上是否有效?

虽然关于vector的remove_if+erase有几十个问题。我找不到这种Action的表现。当我写:myVector.erase(remove_if(myVector.begin(),myVector.end(),some_predicate),myVector.end());removeif将返回指向最后一个相关项+1(我们称它为X)的迭代器。我相信这会在O(n)内发生。但是删除将如何工作?如果删除将尝试从X删除到myVector.end()它将是O(n^2)因为它会导致将vector复制到新位置,并且将有O(n)次新分配从堆。但是如果它将从myVector.end()删除到X

java - 为什么 if 语句中的表达式顺序很重要

假设我有一个IF条件:if(A||B)∧||left{//dosomething}现在假设A比B更有可能收到真值,为什么我要关心左边是哪一个?如果我将它们都放在IF括号中,那么我知道(作为代码的程序员)双方都需要。问题是,我的教授在他的讲义上写道,我应该把“更有可能获得真值的变量”放在左边。有人可以解释一下好处吗?好吧,我把它放在左边...我得到了什么?运行? 最佳答案 不仅仅是选择左边最有可能的条件。你也可以在左边有一个安全guard,这意味着你只能有一个订单。考虑if(s==null||s.length()==0)//ifthe

c++ - 为什么这个 if 条件无法比较负整数和正整数

这个问题在这里已经有了答案:sizeof()operatorinif-statement(5个答案)关闭4年前。#includeintarr[]={1,2,3,4,5,6,7,8};#defineSIZE(sizeof(arr)/sizeof(int))intmain(){printf("SIZE=%d\n",SIZE);if((-1)使用gcc编译后的输出是"more".为什么if即使-1条件也会失败?

c++ - 嵌套 If (x) 检查 - 更好的写法?

在对它们执行操作之前,我会在某些地方检查有效指针;这些检查有时可以嵌套得很深。比如我有if(a){if(a->b()){if(a->b()->c()){a->b()->c()->DoSomething();}}}我真的不喜欢这个样子。有没有办法把它变成更具可读性的东西?理想情况下,if(a&&a->b()&&a->b()->c()){...}会很棒,但显然行不通。编辑-nvm我提出的示例确实有效,正如每个人所指出的那样。我确实测试过它是否有效,但我的测试代码中存在一个错误。呃! 最佳答案 为什么后者不起作用?在C语言中,&&是一个短