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

cir*_*314 2 c++ initializer-list c++11

如何将初始化列表作为函数参数传递的答案中,我看到了表达式:

return WaitForMultipleObjects(
    handles.size(), &*handles.begin(), wait_all, time
);
Run Code Online (Sandbox Code Playgroud)

有什么意义&*呢?没有它,电话会有相同的含义吗?

ild*_*arn 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<>,或者如果它被制作成可以采用任何随机访问容器的函数模板,那么确实是必要的.