gpt4 book ai didi

c++ - C++此函数调用之前的(void)有什么作用?

转载 作者:行者123 更新时间:2023-12-01 14:54:12 25 4
gpt4 key购买 nike

在写这个问题时,我设法弄清楚了这个问题的答案。将其发布给希望帮助遇到类似问题的 future 开发人员。

这是一个简短的摘要:
我有一个定向加权 map 类。
我在以下位置跟踪我的所有节点:vector<Node> nodes;我在map<Node, <map<Node, int>> connections中跟踪所有节点的相邻节点

当我尝试遍历Graph并到达没有任何相邻节点的节点时,由于我的 map 抛出out_of_range异常,它将使程序崩溃。

联机查看后,我看到有人在添加节点时使用以下代码行:(void) connections[node];。如果删除此行代码,则会从 map 类的out_of_range函数中获取.at()异常,但是使用此行代码,它将以某种方式避免该异常。

我的问题:为避免引发异常而执行的代码行是什么?
我现在最好的猜测是,代码行以某种方式创建了一个空的邻接表,而我的for-each循环没有得到异常

    set<Node> nodes; // {n1, n2...nn}
map<Node, map<Node, int>> connections; //Connections between the nodes and their weights

//Add node to graph
void add(Node node) {
nodes.insert(node); //add to node list
(void) connections[node]; //This is the magic line!!
}

bool DFS(N start, N target) {

for (Node node : nodes) {

//This for-each loop crashes when the node in the .at() doesn't exist in the connections map
for (pair<N, int> connectedNode : connections.at(node)) {
if (target == connectedNode.first) {
return true;
}
}
}
return false;
}

最佳答案

在写问题时,我能够回答自己的问题。爱一个美好的Rubber Ducky片刻。希望这个问题可以帮助将来的开发人员,他们也错过了这个问题的基本答案。

stl::map the [ ] operator中,如果存在[],它将获得对键值的引用;如果不存在,则将获得的引用;它将创建一个
因此,在add(Node node)函数中,(void)connections[node]实际上是在邻接图中创建节点。

该行之前的(void)告诉编译器忽略有关此的任何警告,因为从技术上讲,这是不完整的代码行(根据编译器)。阅读更多关于(void)的含义here

关于c++ - C++此函数调用之前的(void)有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59207400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com