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

ora*_*001 4 c++ std c++17 stdoptional

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

void test_func(std::optional<std::vector<int>&> vec)
Run Code Online (Sandbox Code Playgroud)

要么

void test_func(std::optional<std::vector<int>>& vec)
Run Code Online (Sandbox Code Playgroud)

任何帮助,不胜感激。

Yak*_*ont 6

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

void test_func(std::vector<int>* vec)
Run Code Online (Sandbox Code Playgroud)


Kos*_*tas 5

可选的引用目前还不属于标准库的一部分

原则上两者都有道理。

void test_func(std::optional<std::vector<int>&> vec)
Run Code Online (Sandbox Code Playgroud)

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

void test_func(std::optional<std::vector<int>>& vec)
Run Code Online (Sandbox Code Playgroud)

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

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


JVA*_*pen 2

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

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

  void test_func(std::optional<std::reference_wrapper<std::vector<int>>> vec)
Run Code Online (Sandbox Code Playgroud)