tl; dr:C++中是否存在非短路逻辑AND(类似于&&)?
我有两个我想调用的函数,并使用返回值来计算第三个复合函数的返回值.问题是我总是希望评估两个函数(因为它们输出有关系统状态的日志信息)
IE:
bool Func1(int x, int y){
if( x > y){
cout << "ERROR- X > Y" << endl;
}
}
bool Func2(int z, int q){
if( q * 3 < z){
cout << "ERROR- Q < Z/3" << endl;
}
}
bool Func3(int x, int y, int z, int q){
return ( Func1(x, y) && Func2(z, q) );
}
Run Code Online (Sandbox Code Playgroud)
当然,条件语句是不是在功能那么简单,是的,我知道我可以使用临时变量来存储的两个函数的返回,接着做临时变量"短路"的逻辑,但我想知道是否有一个"优雅"的语言解决方案来保持Func3中的单行返回,同时仍然从两个函数获取日志消息.
答复摘要:
"按位"运算符| 和&可用于获得效果,但仅当返回类型为bool时.我在ANSI C++规范中没有提到这一点.从我可以告诉,这个工程因为"布尔"被转换为int(真= 1,假= 0),然后将位运算符时,则转换回一个布尔值.
也可以使用运算符" +"和" *".这在ANSI C++规范中没有提到,但可能因为与上述相同的原因而起作用." +"给"或"因为true被转换为1,然后除了0之外的任何东西都被转换回true." *"适用于"和"因为1(真)*0(假)== 0(假)和1(真)*1(真)== …
这是一个简单的问题,但我似乎无法找到明确的答案.
如果我们有以下课程:
class Test
{
...
char testArray[10];
...
};
Run Code Online (Sandbox Code Playgroud)
当我们创建一个Test实例时,testArray [1]的默认值是什么?
如果它是一个本地数组,它将是未初始化的.
如果它是一个静态数组,它将被初始化为0.
当数组是类成员时它会怎么做?
我需要比较使用相同编译器/标志编译的2个可执行文件和/或共享对象,并验证它们没有更改.我们在受监管的环境中工作,因此对于测试目的而言,确切地隔离可执行文件的哪些部分已经发生变化非常有用.
由于包含有关文件信息的标头,因此使用MD5Sums/Hashes不起作用.
有没有人知道一个程序或方法来验证2个文件是否在执行上是相同的,即使它们是在不同的时间构建的?
我必须上传我更改的文件以进行代码审查,但我有以下问题:
我需要查看自上次代码审核上传以来我视图中已更改的所有文件.当我上次审核上传时,我以为我标记了所有文件,但似乎我没有.
如何在当前视图中找到日期比我上次上传日期更新的所有clearcase元素?自上次上传以来,已经有很多签到.
我们有一个目前使用Make on Linux构建的C++项目.我希望自动化它类似于CruiseControl下的Java项目.
1)是否有类似于CruiseControl for C++项目的项目?
要么
2)使用CruiseControl进行C++项目是否有一个很好的"操作方法"?
我知道 - 过早优化.
但是我有代码可以找出一个位置是否与缓存位置相比发生了变化.
目前的代码是:
if(abs(newpos-oldpos) > 1){
.....
}
Run Code Online (Sandbox Code Playgroud)
使用以下内容更有效吗?
if(abs(newpos-oldpos) != 0){
....
}
Run Code Online (Sandbox Code Playgroud)
为什么或者为什么不?我目前正在讨论我的头脑,它更具可读性,并且想知道是否存在性能上的差异.
我正在尝试将make变量的值转储到文件中以供进一步处理.
到目前为止,我已经能够使用以下规则将值打印到命令行:
print-%:
@echo '$*=$($*)'
Run Code Online (Sandbox Code Playgroud)
您使用命令行调用的
make print-VAR
Run Code Online (Sandbox Code Playgroud)
我真的不想在stdout上,但打印到文件.GNU Make"文件"功能看起来像我应该使用的东西:http: //www.gnu.org/software/make/manual/html_node/File-Function.html#File-Function
该页面立即跳转到一个复杂的例子中,所以我已经实现了以下但似乎无法使它工作:它将@echo打印到stdout,但当我查看我的目录时没有output.txt文件.
printf-%:
@echo '$*=$($*)'
$(file > output.txt,$($*))
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
编辑:好吧,看起来我可以使用
@echo '$($*)' > output.txt
Run Code Online (Sandbox Code Playgroud)
做我想做的事,但这仍然无法解释为什么我的文件调用不起作用.
c++ ×4
comparison ×2
automation ×1
clearcase ×1
executable ×1
gnu-make ×1
hudson ×1
makefile ×1
operators ×1
optimization ×1
performance ×1