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

时间:2018-12-09 02:45:30

标签: c++ std c++17 stdoptional

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

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

{{1}}

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:4)

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

String output = "red 5green 5blue 10white 15"
int sum = 0

for (String token : output.replaceAll(/\D+/, " ").trim().split(/\s+/)) {
    sum += Integer.parseInt(token)
}

println(sum)

答案 1 :(得分:3)

可选的参考文献是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中使用,因此可取

答案 2 :(得分:1)

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

您希望通过库功能实现以下目标:

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