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(真)== …
我一直在寻找几个小时试图弄清楚我做错了什么,而且我已经摆脱了我的大多数问题但是当我尝试编译我的代码时,main()
它会出现同样的错误信息:
request for member "..." in "..." which is of non-class type "..."
Run Code Online (Sandbox Code Playgroud)
它会重复我尝试调用的所有函数main()
.问题是什么?我无法弄清楚我的错误在哪里.
我在macbook上使用Terminal来编译代码.
这是我的主要功能:
//Program1.cpp
//Program1Math test function
#include "Program1Math.h"
int main()
{
//Create a Program1Math object
Program1Math myProgram1Math();
myProgram1Math.setNumber1();
myProgram1Math.setNumber2();
myProgram1Math.displayMultiple();
myProgram1Math.displaySine1();
myProgram1Math.displayTangent1();
myProgram1Math.displaySine2();
myProgram1Math.displayTangent2();
}
Run Code Online (Sandbox Code Playgroud)
以下是该类的成员函数定义:
//Program1Math.cpp
//Program1Math member-function definitions.
#include <iostream>
#include <cmath>
#include "Program1Math.h"
using namespace std;
//constructor makes a Program1Math, adds an blank line
Program1Math::Program1Math()
{
cout << "/n";
}
//function to assign the first integer to its appropriate …
Run Code Online (Sandbox Code Playgroud) vector<T> vec{...}
假设T是一种数值类型,给定一种提取其最小值,最大值和中位数的最佳方法是什么?我知道的std::nth_element
还有std::minmax_element
,但他们似乎做多余的工作,如果叫了一个又一个。
到目前为止,我想到的最好的主意是一次叫std :: nth_element 3次。但这仍然需要3N比较,对吗?有什么方法可以重用先前迭代中完成的部分排序吗?
我正在使用VS2010的boost 1.50,使用Windows文件HANDLE读取(与使用套接字的asio相比,这似乎相对不常见).
该
handle_read
回调获取到线8并返回与所有所附线1的第一位; 进一步的回调再次从第2行循环,令人作呕:
handle_read
具有第1行到第7行的正确内容的预期回调length
参数长于预期length
,但是从asio流缓冲区中getline
提取相应更长的行handle_read
回调回收第2行到第7行,然后发生"长混合"线问题LINE 1 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
LINE 2 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
...3--E similarly...
LINE F abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
Run Code Online (Sandbox Code Playgroud)
这是前15行输出(它永远持续):
line #1, length 70, getline() [69] 'LINE 1 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
line #2, length 70, getline() [69] 'LINE 2 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
...line #3 through #6 are fine too...
line #7, length 70, getline() [69] 'LINE 7 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' …
Run Code Online (Sandbox Code Playgroud) 这些C++行是什么意思?有没有其他方法来编写它们?
const int& a() const;
int getA() const;
Run Code Online (Sandbox Code Playgroud)
谢谢.
我怀疑答案是否定的,但是有没有相当于C++一元前缀和后缀增量运算符"++".例如.
int test = 1;
SomeFunc(test++); // test is 1 inside SomeFunc and 2 afterwards
test = 1;
Somefunc(++test); // test is 2 inside SomeFunc and 2 afterwards
Run Code Online (Sandbox Code Playgroud)
我知道Delphi中的Inc(和Dec)运算符,但是你不能将它传递给函数,如:
test: Integer;
//...
SomeFunc(Inc(test)); // compiler error, incompatible types
Run Code Online (Sandbox Code Playgroud)
除了编译错误之外,似乎没有不同的前缀和后缀增量.写这样的代码不是一个大问题:
SomeFunc(test);
test := (test + 1);
SomeFunc(test);
Run Code Online (Sandbox Code Playgroud)
但是C++中的++(和 - )运算符是一个很棒的特性.
我正在将一个bash脚本移植到python 2.6,并想要替换一些代码:
cat $( ls -tr xyz_`date +%F`_*.log ) | filter args > bzip2
Run Code Online (Sandbox Code Playgroud)
我想我想要一些类似于http://docs.python.org/release/2.6/library/subprocess.html上的"替换shell管道"示例,ala ...
p1 = Popen(["filter", "args"], stdin=*?WHAT?*, stdout=PIPE)
p2 = Popen(["bzip2"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]
Run Code Online (Sandbox Code Playgroud)
但是,我不确定如何最好地提供它p1
的stdin
值,以便它连接输入文件.似乎我可以添加......
p0 = Popen(["cat", "file1", "file2"...], stdout=PIPE)
p1 = ... stdin=p0.stdout ...
Run Code Online (Sandbox Code Playgroud)
...但这似乎超越了使用(缓慢,低效)管道来调用具有重要功能的外部程序.(任何体面的shell都会在cat
内部执行.)
所以,我可以设想一个满足文件对象API要求的自定义类,因此可以用于p1的stdin,连接任意其他文件对象.(编辑:现有答案解释了为什么这是不可能的)
难道蟒蛇2.6有一个机制,解决这方面的需要/想,或其他可能Popen
对cat
在Python界被认为是完美的罚款?
谢谢.
更新:示例现在列出所需的结果(下方以粗体显示)
我发现自己编写了许多搜索一些数据的函数,我想让调用者在找到匹配项时指定行为:它们可能会打印出一些内容或将其添加到其中一个数据结构中,但也非常希望能够可选地返回找到的数据以进一步传输,存储或处理.
def find_stuff(visitor): # library search function
for x in (1, 2, 3, 4, 5, 6):
visitor(x)
Run Code Online (Sandbox Code Playgroud)
首次客户使用:
def my_visitor(x): # client visitor functions (also often use lambdas)
if x > 3:
yield x / 2 #>>> WANT TO DO SOMETHING LIKE THIS <<<#
results = find_stuff(my_visitor) # client usage
Run Code Online (Sandbox Code Playgroud)
results
应该产生4/2,5/2,然后是6/2 ......即2,2,3.
第二个客户使用:
def print_repr_visitor(x):
print repr(x)
find_stuff(print_repr_visitor) # alternative usage
Run Code Online (Sandbox Code Playgroud)
应打印1 2 3 4 5 6(单独的行)但不产生任何结果
但是,它yield
并没有在"结果"中创建一个生成器(至少使用python 2.6.6,我坚持使用).
我一直在乱砍这个,经常这样......
def find_stuff(visitor):
for x …
Run Code Online (Sandbox Code Playgroud)