使用 std::optional 通过引用将 std::vector<int> 传递给函数

Use of std::optional to pass a std::vector<int> to a functional by reference

我不清楚通过引用将可选的整数向量传递给函数的正确代码是否是:

void test_func(std::optional<std::vector<int>&> vec)

void test_func(std::optional<std::vector<int>>& vec)

非常感谢任何帮助。

可选的参考文献是not part of the standard library at the moment

原则上两者都有道理。

void test_func(std::optional<std::vector<int>&> vec)

这里的std::optional是按值传递的(复制),里面的引用也是。复制引用意味着它仍然指向旧对象。这可能会产生意外行为,因为 std::optional 的两个实例指向同一个 std::vector.

void test_func(std::optional<std::vector<int>>& vec)

这里的std::optional是通过引用传递的。您正在访问已传递的相同选项,不会发生任何复制。

第二个 更直观恕我直言,目前在 STL 中可用,因此更可取

非拥有指针是可为空的引用类型。

void test_func(std::vector<int>* vec)

据我所知,这在标准中是不可能的,因为人们尚未就赋值的效果达成一致。

您想要实现的功能可以通过库功能实现:

  void test_func(std::optional<std::reference_wrapper<std::vector<int>>> vec)