小编f22*_*222的帖子

是否定义了在 if (C++17) 中分配给函数调用的行为

在代码库重构期间,我发现了这样的代码:

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 的哪一侧将被分配给正确的值,但这对我来说仍然感觉有点不好。

这种行为有定义吗?

c++ undefined-behavior c++17

4
推荐指数
1
解决办法
126
查看次数

引用列表元素然后弹出它,这是未定义的行为吗?

我有这段代码,我想知道它是否有效或可能导致未定义的行为:

#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)

我使用引用来避免重复已经存在的对。

一方面,我认为这可能是未定义的行为,因为我正在删除引用的元素,但另一方面,在删除它后我不会访问该引用。

有效吗?

c++ undefined-behavior language-lawyer

3
推荐指数
1
解决办法
159
查看次数

标签 统计

c++ ×2

undefined-behavior ×2

c++17 ×1

language-lawyer ×1