我不清楚是否通过引用将一个可选的int向量传递给函数的正确代码是:
void test_func(std::optional<std::vector<int>&> vec)
要么
void test_func(std::optional<std::vector<int>>& vec)
任何帮助非常感谢 .
据我所知,这在标准中是不可能的,因为一个人没有就任务的影响达成一致 .
使用库功能可以实现您想要实现的目标:
void test_func(std::optional<std::reference_wrapper<std::vector<int>>> vec)
引用的可选项是not part of the standard library at the moment .
两者原则上都有道理 .
这里 std::optional 由值(复制)传递,其中的引用也是如此 . 复制引用意味着它仍然指向旧对象 . 这可能会产生意外行为,因为有两个 std::optional 实例指向同一个 std::vector .
std::optional
std::vector
这里 std::optional 通过引用传递 . 您正在访问传递的相同选项,不会进行复制 .
second 一个是更直观的imho,目前在STL中可用,所以它是 preferable .
非拥有指针是可以为空的引用类型 .
void test_func(std::vector<int>* vec)
3 回答
据我所知,这在标准中是不可能的,因为一个人没有就任务的影响达成一致 .
使用库功能可以实现您想要实现的目标:
引用的可选项是not part of the standard library at the moment .
两者原则上都有道理 .
这里
std::optional
由值(复制)传递,其中的引用也是如此 . 复制引用意味着它仍然指向旧对象 . 这可能会产生意外行为,因为有两个std::optional
实例指向同一个std::vector
.这里
std::optional
通过引用传递 . 您正在访问传递的相同选项,不会进行复制 .second 一个是更直观的imho,目前在STL中可用,所以它是 preferable .
非拥有指针是可以为空的引用类型 .