我了解std::optional<std::reference_wrapper<T>>
,它可以用来传递可选的引用。
然而,我无法想到实际的应用场景,在这种情况下使用optional<T>&
可能更为简单。
例如,假设我正在编写一个函数,需要通过引用传递可选的vector<int>
。
我可以这样做:
void f(optional<reference_wrapper<vector<int>>> v) {
// ...
}
int main() {
vector<int> v = {1, 2, 3, 4};
f(make_optional<reference_wrapper<vector<int>>>(std::ref(v));
return 0;
}
但为什么不这样做呢?
void f(optional<vector<int>>& v) {
// ...
}
int main() {
f(make_optional<vector<int>>>(std::initializer_list{1, 2, 3, 4}));
return 0;
}
请给出一个例子,说明何时使用
optional<reference_wrapper<T>>
比使用 optional<T>&
更佳。它们的语义差异,尤其是在实践中可以利用的方式并不清楚。
optional
将是一个被返回的临时变量。 - ChrisMM