以及C++中的运算符参数求值
And operator argument evaluation in C++
和运算符如何评估其参数。我有一个代码来检查一个图是否是循环的。在这段代码中,if语句中有一个和条件。我认为,就我所能理解的而言,它在第一次遇到错误表达式时终止,而根本不评估第二个表达式。
这是代码
bool Graph::isCyclicUtil(int v, bool *visited, bool *recStack){
if (visited[v] == false){
// Mark the current node as visited
visited[v] = true;
recStack[v] = true;
// Recur for all the vertices adjacent to this vertex
list<int>::iterator i;
for (i = adj[v].begin(); i != adj[v].end(); i++){
-------->**This and cond**if (!visited[*i] && isCyclicUtil(*i, visited, recStack))
return true;
else if (recStack[*i])
return true;
}
}
recStack[v] = false; // remove the vertex from the recursion stack
return false;
}
void Graph::printRecStack(bool *recStack){
cout << "n n";
for (int i = 0; i < V; i++){
if (recStack[i])
cout <<i<< "n";
}
return;
}
bool Graph::isCyclic(){
// Mark all the vertices as not visited and not part of recursion stack
bool *visited = new bool[V];
bool *recStack = new bool[V];
for (int i = 0; i<V; i++){
visited[i] = false;
recStack[i] = false;
}
// Call the recursive helper function to detect cycle in different
// DFS trees.
if (isCyclicUtil(0,visited, recStack)){
printRecStack(recStack);
return true;
}
/*for (int i = 0; i < V; i++){
if (isCyclicUtil(i, visited, recStack))
printRecStack(recStack);
return true;
}*/
return false;
}
请观察isCyclicUtil函数中if语句内部的和条件。
如果你把一个简单的图作为一个测试用例,比如这个:
0->1
1->2
2->0
2->3
3->3
并且调用isCyclicUtil对于0,recStack//strong>中的第一个<1>值为true。如果第二个表达式也在if语句中求值,则情况不应该如此。因为对节点2的调用将到达其子节点0。但由于循环从0开始,0已经被访问,因此recStack[0]应该初始化为false。但这并没有发生,所有这些都是真的。就好像和条件在遇到visited[0]时立即终止为真,甚至没有再次调用isCyclicUtil(0,visited,recStack[/strong>)。
相关文章:
- 如何使基类的运算符对基类的可变参数数可见(请参阅下面的代码)?
- 具有两个间接寻址运算符 (C++) 的函数参数的用途
- 运算符重载:"operator+"必须采用零个或一个参数
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到
- 参数相关查找和流运算符重载
- C++:使用运算符 = 调用多参数构造函数
- 了解布尔运算符==(参数 1,参数 2)
- 我能否根据其运算符()的签名专门化可变参数模板参数
- SFINAE 检查模板参数运算符
- 不允许运算符 const 参数调用 const 成员函数
- 为私有结构定义双参数运算符重载
- C++ 通过自定义赋值运算符隐式转换函数参数
- 函数参数变量总是需要 & 或 * 运算符吗?
- 有条件地将默认参数传递给函数(使用"?"运算符)
- 可变参数模板参数转发使用逗号运算符
- C++函数,它将数组、谓词和运算符作为参数,并将运算符应用于满足谓词的数组元素
- 具有两个或多个模板参数的 C++ assigment 运算符
- 将多个参数传递给运算符 []
- 如何使用类的参数重载运算符+?
- 不允许在C++中使用多参数运算符 [] 的根本原因