4

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

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

或者

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

非常感谢任何帮助。

4

3 回答 3

6

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

void test_func(std::vector<int>* vec)
于 2018-12-09T03:32:54.813 回答
5

目前可选的引用不是标准库的一部分

两者原则上都有意义。

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 中可用,因此更可取

于 2018-12-09T03:14:30.100 回答
2

据我所知,这在标准中是不可能的,因为人们尚未就任务的影响达成一致。

使用库功能可以实现您想要实现的目标:

  void test_func(std::optional<std::reference_wrapper<std::vector<int>>> vec)
于 2018-12-09T05:13:04.647 回答