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

时间:2016-01-25 06:18:46

标签: c++ c++11 initializer-list

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

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

&*的重点是什么?没有它,电话会有相同的含义吗?

1 个答案:

答案 0 :(得分:5)

  • 通常,container.begin()返回迭代器
  • 通常,&*container.begin()会返回一个指针
  • WaitForMultipleObjects需要HANDLE const*

特别是对于std::initializer_list<>,迭代器被定义为指针;但是A)这不能推广到其他容器类型,B)标准库实现经常在调试版本中使用已检查的迭代器,这些迭代器必然是UDT。

对于您链接的特定答案,&* 是必要的,因为它专门使用std::initializer_list<>;但是,如果wait_for_multiple_objects取而代之的是std::array<>std::vector<>,或者如果它被制作成可以接受任何随机访问容器的函数模板,那么确实是必要的。