在代码库重构期间,我发现了这样的代码:
void myFunction (std::map<int, int> my_map)
{
int linked_element;
if (my_map[linked_element = firstIndex] != 0
|| my_map[linked_element = secondIndex] != 0)
{
// do some stuff with linked_element
}
}
Run Code Online (Sandbox Code Playgroud)
或者
void myFunction (std::set<int> my_set)
{
int linked_element;
if (my_set.find(linked_element = firstIndex) != my_set.end()
|| my_set.find(linked_element = secondIndex) != my_set.end())
{
// do some stuff with linked_element
}
}
Run Code Online (Sandbox Code Playgroud)
据我了解,这样做的目的是避免检查两次(第一次是在输入 if 时,第二次是在分配变量时)。我可以理解,根据||true linked_element 的哪一侧将被分配给正确的值,但这对我来说仍然感觉有点不好。
这种行为有定义吗?
我有这段代码,我想知道它是否有效或可能导致未定义的行为:
#include <list>
#include <utility>
void myFunction(std::list<std::pair<int, int>> foo)
{
while (foo.size())
{
std::pair<int, int> const &bar = foo.front();
//work with bar
foo.pop_front();
}
}
Run Code Online (Sandbox Code Playgroud)
我使用引用来避免重复已经存在的对。
一方面,我认为这可能是未定义的行为,因为我正在删除引用的元素,但另一方面,在删除它后我不会访问该引用。
有效吗?