在 C++ 中组合前缀 &* 操作

Combining prefix &* operations in C++

How to pass an initializer list as a function argument? 的答案中,我看到了表达式:

return WaitForMultipleObjects(
    handles.size(), &*handles.begin(), wait_all, time
);

&* 有什么意义?如果没有它,调用是否具有相同的含义?

  • 一般来说,container.begin() returns 一个迭代器
  • 一般来说,&*container.begin() returns一个指针
  • WaitForMultipleObjects 期望 HANDLE const*

特别是std::initializer_list<>,迭代器被定义一个指针;但是 A) 这不能推广到其他容器类型,并且 B) 标准库实现通常在调试构建中使用检查迭代器,这必然是 UDT。

对于您链接到的特定答案,&* 不是 必需的,因为它专门使用 std::initializer_list<>;但是,如果 wait_for_multiple_objects 取而代之的是 std::array<>std::vector<>,或者如果将其制作成可以使用任何 random-access 容器的函数模板,那确实是必要的。