在 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 容器的函数模板,那确实是必要的。
在 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 容器的函数模板,那确实是必要的。